我已经为外部定义的数据包定义了一个 struct 体,如下所示:
[StructLayout(LayoutKind.Explicit, Size=18, Pack=1, CharSet=CharSet.Ansi)]
struct FlexTransmission
{
[FieldOffset(0), MarshalAs(UnmanagedType.U4, SizeConst =4)]
public UInt32 transmissionTime;
[FieldOffset(4),MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)]
public byte[] flexData; // size 13 bytes
[FieldOffset(17)]
public byte transmissionNumber;
}
然而,这个 struct 被编译器认为是错误的(#11,.NET 7):
System.TypeLoadException:‘无法从程序集’Flex,版本=1.0.0.0,区域性=中性,PublicKeyToken=NULL‘加载类型’Flex.FlexTransport‘,因为它在偏移量4处包含的对象字段未正确对齐或与非对象字段重叠.’
我看不出重叠处在哪里.在C#中,UInt32肯定不会占用超过4个字节?