我试图为3个Int16元素的两个数组保留空间,每个数组总共6个字节。 我需要在结构内显式声明每个元素。 在运行时,由于未对齐而发生错误。
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct Test
{
[FieldOffset(0)]
[MarshalAs(UnmanagedType.U4)]
public UInt32 number;
[FieldOffset(4)]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name;
[FieldOffset(36)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)]
public Byte[] array1;
[FieldOffset(42)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.I2)]
public Int16[] array2;
}
只有将第二个数组的偏移量从42移到44才能解决。 是否有可能消除填充?我尝试使用“ Pack = 1”修复它,但没有成功。
请先帮助并感谢!