我使用以下代码将文件读入结构:
StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();
但是我注意到,任何大于byte的变量,例如int32,int16都会向后接收数据。例如,如果文件中的数据为:AA BB CC DD 相应的变量(int32)将为:DD CC BB AA。
我的结构体是用属性[StructLayout(LayoutKind.Sequential), Pack = 1]
有人知道为什么以及如何解决吗?
谢谢!
答案 0 :(得分:0)
如果文件使用big-endian字节顺序会发生这种情况,但是结构的数据成员当然是little-endian,对此您无能为力。没有布局说明符可以更改结构字段的字节序,这是平台的属性。有一些处理大端文件的选项: