BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3922同步于 2012/10/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

求助,byte型数据转化为结构体的问题

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