如何将动态长度数组成员的结构转换为byte []?

时间:2013-07-09 07:56:35

标签: c# struct bytearray marshalling

我有这样的结构:

    struct test
    {
        [MarshalAs(UnmanagedType.ByValArray)]
        public byte[] a;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string b;
    }

且成员a大小是动态的,这意味着我无法在SizeConst属性中编写MarshalAs以下是问题: 当我尝试将其转换为byte[]时:

    int size = Marshal.SizeOf(t);

    byte[] bs = new byte[size];

    IntPtr pt = Marshal.AllocHGlobal(size);
    Marshal.StructureToPtr(t, pt, false);
    Marshal.Copy(pt, bs, 0, size);
    Marshal.FreeHGlobal(pt);

size是201,正确的尺寸是212,因此结果byte[]是错误的。它只有t.a中的第一个元素。

然后我试着让尺寸正确如下:

 int size = Marshal.SizeOf(t);
 size += t.a.Length - 1;

但即使size是正确的,结果byte[]仍然是错误的,我怎样才能使结果正确?

0 个答案:

没有答案