是元帅填充吗?

时间:2019-09-11 11:30:00

标签: c# arrays

我试图为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”修复它,但没有成功。

请先帮助并感谢!

0 个答案:

没有答案
相关问题