using System.Runtime.InteropServices;
HeaderCommand data = new HeaderCommand();
data.byteSize = new byte[20];
data.val.robotName = new char[20];
data.val.robotName[0] = 'A';
data.val.robotName[19] = 'Z';
data.val.robotVersion = new char[12];
data.val.robotVersion[0] = 'A';
data.val.robotVersion[11] = 'Z';
data.val.reserved = new char[10];
data.val.reserved[0] = 'A';
data.val.reserved[9] = 'Z';
var b= StructureToByte(data);
Console.WriteLine(b.Length);
public struct HeaderCommand
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] 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;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public char[] reserved;
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);