一般,定长的可以用
public byte[] StructToBytes(object obj)
9 {
10 //得到结构体的大小
11 int size = Marshal.SizeOf(obj);
12 //创建byte数组
13 byte[] bytes = new byte[size];
14 //分配结构体大小的内存空间
15 IntPtr structPtr = Marshal.AllocHGlobal(size);
16 //将结构体拷到分配好的内存空间
17 Marshal.StructureToPtr(obj, structPtr, false);
18 //从内存空间拷到byte数组
19 Marshal.Copy(structPtr, bytes, 0, size);
20 //释放内存空间
21 Marshal.FreeHGlobal(structPtr);
22 //返回byte数组
23 return bytes;
24
25 }但是不定长的结构有问题,不知怎么实现。
public byte[] StructToBytes(object obj)
9 {
10 //得到结构体的大小
11 int size = Marshal.SizeOf(obj);
12 //创建byte数组
13 byte[] bytes = new byte[size];
14 //分配结构体大小的内存空间
15 IntPtr structPtr = Marshal.AllocHGlobal(size);
16 //将结构体拷到分配好的内存空间
17 Marshal.StructureToPtr(obj, structPtr, false);
18 //从内存空间拷到byte数组
19 Marshal.Copy(structPtr, bytes, 0, size);
20 //释放内存空间
21 Marshal.FreeHGlobal(structPtr);
22 //返回byte数组
23 return bytes;
24
25 }但是不定长的结构有问题,不知怎么实现。
解决方法:
1.如果结构体很大,可以用while分段传送
2.可以对传送包加标记,例如最后一个包,结尾加一个/end 。或者开头加入整个结构体大小,接收方累计接到这个大小后。组合成结构体。