返回信息流直接上图
代码中结构体部分定义了一个byte型数组和一个int型数据。后来通过赋值使得byte数组大小为1316,int为8;
然后sizeof之后,发现得到的size只有8。
而且即使人为地把size改为1324的话,那么在分配内存的时候,还是不能正确分配空间,导致一个1324字节的结构体,转化为byte之后只有8个字节。。。
初学,不太懂,求大神指点,多谢多谢
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3922同步于 2012/10/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
求助,byte型数据转化为结构体的问题
froglian
2012/10/16镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
[StructLayout(LayoutKind.Sequential,Pack=1)]
干嘛 Pack=1?
没有特别必要,可以去掉Pack
[StructLayout(LayoutKind.Sequential)]
.net数组是引用类型,所以sizeof得到的是引用地址的大小,也就是一个32位指针的大小,4+4=8没错。。。
【 在 froglian 的大作中提到: 】
: 直接上图
: 代码中结构体部分定义了一个byte型数组和一个int型数据。后来通过赋值使得byte数组大小为1316,int为8;
: 然后sizeof之后,发现得到的size只有8。
: ...................
【 在 Kazuki 的大作中提到: 】
: .net数组是引用类型,所以sizeof得到的是引用地址的大小,也就是一个32位指针的大小,4+4=8没错。。。
恩。。。后来发现这个问题了。。
貌似C#做sokcet通信想传递结构体的时候,如果结构体里面有数组的话,以上办法行不通,只能用序列化的方法
【 在 ahomer 的大作中提到: 】
: [StructLayout(LayoutKind.Sequential,Pack=1)]
: 干嘛 Pack=1?
: 没有特别必要,可以去掉Pack
: ...................
恩。。初学的,网上看了一些代码自己截取些功能写的。。。
是的,其实序列化也不麻烦。。。
【 在 froglian 的大作中提到: 】
: 恩。。。后来发现这个问题了。。
: 貌似C#做sokcet通信想传递结构体的时候,如果结构体里面有数组的话,以上办法行不通,只能用序列化的方法
【 在 Kazuki 的大作中提到: 】
: 是的,其实序列化也不麻烦。。。
但是序列化会导致数据包所占的空间变大,在我的平台中会造成一些不必要的麻烦。。有什么解决办法没有。。。
这。。。占用空间神马的。。。倒是没关注过。。。
【 在 froglian 的大作中提到: 】
: 但是序列化会导致数据包所占的空间变大,在我的平台中会造成一些不必要的麻烦。。有什么解决办法没有。。。