我想做以下事情:
[StructLayout(LayoutKind.Sequential,Pack = 1)] public struct SomeStruct { public byte SomeByte; public int SomeInt; public short SomeShort; public byte SomeByte2; }
是否有替代方案,因为紧凑框架不支持Pack?
更新:显式设置结构并为每个提供FieldOffset都不起作用,因为它不会影响结构的打包方式
Update2:如果您尝试以下操作,CF程序甚至不会运行,因为结构的打包方式如下:
[StructLayout(LayoutKind.Explicit,Size=8)] public struct SomeStruct { [FieldOffset(0)] public byte SomeByte; [FieldOffset(1)] public int SomeInt; [FieldOffset(5)] public short SomeShort; [FieldOffset(7)] public byte SomeByte2; }
我知道这似乎很难相信,但如果你尝试它,你会看到.将它添加到CF项目并尝试运行它,您将获得TypeLoadException.将偏移分别更改为0,4,8,10并且它将起作用(但是大小最终为12).
解决方法
这可能不是您正在寻找的答案类型,但无论如何我会发布它的地狱:
public struct SomeStruct { public byte SomeByte; public int SomeInt; public short SomeShort; public byte SomeByte2; public byte[] APIStruct { get { byte[] output = new byte[8]; output[0] = this.someByte; Array.copy(BitConverter.GetBytes(this.someInt),output,1,4); Array.copy(BitConverter.GetBytes(this.someShort),5,2); output[7] = this.someByte2; return output; } set { byte[] input = value; this.someByte = input[0]; this.someInt = BitConverter.ToInt32(input,1); this.someShort = BitConverter.ToInt16(input,5); this.someByte2 = input[7]; } } }
基本上它在APIStruct属性中进行打包/解包.
原文地址:https://www.jb51.cc/csharp/98829.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。