如何在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)
检查结构大小是否错误?