如题,或者定义一个未知大小的数组?
再请问一下前辈,怎样将一个已有的数组拷贝到结构体中?如下:
struct Test
{
byte a;
byte b;
byte [ ] c;
}
Test st;
st.c=new byte[50];
byte buf [ 100 ] ;
for(int i=0; i<100; i++)
{
buf [ i ] = i ;
}
// 在这里写代码将buf 里的数组拷贝到st里,
// 如果能实现的话,效果应该如下:
// buf 里的数据是:buf [0]=0、buf [1]=1、buf [2]=2、buf [3]=3、buf [4]=4 、……
// 在拷贝数据之后,结构本st里的成员数据应该如下:
// st.a=0;
// st.b=1;
// st.c[0]=2 、 st.c[1]=3 、 st.c[2]=4 、 st.c[3]=5 、 st.c[4]=6、 st.c[5]=7 、……
请问前辈们,这要怎样写才能做到?请高手们帮帮,小弟觉得这是个技术高深的问题,小弟不懂,望前辈们帮帮忙!!
那怎么获取结构体的长度呢?比如你说的结构体变量 book1的长度,因为里面有一个未知的数组,在对数组实例化前后对比下,结构体的内存长度是否会变化?
追答长度肯定是变化的,因为c#中的struct和C中的是不一样的,c#中struct是一个对象,结构名是一个相当于指针的东西,你没法判断struct的长度,C的struct是静态的,所有的成员都是确定的,
你为什么要取struct长度,这个看似简单问题其实不简单.....因为包含了不定的数组在里面,要实现你那个copy自己写个方法就是了
public struct stuTest
{
public byte a;
public byte b;
public byte[] c;
}
public stuTest copyByteArray(byte[] byte1)
{
stuTest mystuTest = new stuTest();
int ii = 2;
mystuTest.a = byte1[0];
mystuTest.b = byte1[1];
int jj = byte1.Length - ii;
if (jj > 0)
{
mystuTest.c = new byte[jj];
for (int i = 0; i < jj; i++)
{
mystuTest.c[i] = byte1[i + ii];
}
}
return mystuTest;
}
嗯,你说方法可以,我也想到了,但这只能用于成员少量的情况下的结构体,要是成员变量很多的情况下就不适用了,比如,结构体嵌结构体,一环嵌一环,如果用你所说的方法,那就是代码量与效率的问题了。因为在C语言那边,只需要强制转换一下就可以了,比如在C语言实现你的例子了:
memcpy(&mystuTest, byte1, sizeof(mystuTest));
只要一句就可以了。而C#只能在结构体没有数组时才行,一旦加上数组则就不行,不知道为什么!
唉,看来你的思路还是C的老路, C#是完全面向对象的,你不能用对象来实现啊,非要struct ,对象是可以打包解包的,是可以类型转换的只要有共同的父类,c#里面的struct是没法控制的,用对象来代替struct也可以有成员,也可以嵌套啊,不知道你到底要搞什么东西,你最好用面向对象的思维来考虑....
追问呵呵。。谢谢你的回答,我自己已经研究出来了,就是刚刚出来的结果的,功能和C语言一样,代码量很少,效率很高!
追答哦,是个什么样子呢,该我请教了?
本回答被提问者和网友采纳