如何在C#中将结构转换为字节数组?

时间:2018-04-20 11:23:24

标签: c# marshalling

如何在C#中将结构转换为字节数组?

我有以下两种结构:

    public struct HeaderCommand
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = SIZE_HEADER_COMMAND)] public byte[] byteSize;
        public HeaderCommandStruct val;

    }

    public struct HeaderCommandStruct
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public char[] robotName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public char[] robotVersion;
        public byte stepInfo;
        public byte sof;
        public int invokeId;
        public int dataSize;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public char[] reserved;
        public int cmdId;
    }

我想使用下面的StructureToByte方法将HeaderCommand Structure转换为字节数组。

    public static byte[] StructureToByte(HeaderCommand data)
    {
        int dataSize = Marshal.SizeOf(data);
        byte[] arr = new byte[dataSize];

        IntPtr ptr = Marshal.AllocHGlobal(dataSize);
        Marshal.StructureToPtr(data, ptr, false);
        Marshal.Copy(ptr, arr, 0, dataSize);
        Marshal.FreeHGlobal(ptr);
        return arr;
    }

当我运行代码时,抛出异常" System.ArgumentException" 。 我想问题是字节数​​组的大小与Headercommand结构不同。

异常发生在' Marshal.StrucutureToPtr(data,ptr,false)'

我是否遗漏了某些内容,或者使用Marshal.Sizeof(struct)检查结构大小是否错误?

0 个答案:

没有答案