++的结构体如下,需要用C#表示这个结构体并转为byte数组用TcpClient发送。
struct test
{
unsigned long ID;
char A[20];
char B[20];
};
表示为C#为,表示的对否?如果不对,应如何表示?
public struct test
{
public uint ID;
public char[] A;
public char[] B;
}
在网上找到将上面结构体转为byte的方法如下
test temp ;
temp.ID =100;
temp.A = new char[20];
temp.B = new char[20];
int rawsize = 45;// Marshal.SizeOf(test);
IntPtr buffer = Marshal.AllocHGlobal(1024);
Marshal.StructureToPtr(temp, buffer, false);//这句会崩溃~~~
byte[] rawdatas = new byte[rawsize];
Marshal.Copy(buffer, rawdatas, 0, rawsize);
#region
[StructLayout(LayoutKind.Sequential, Pack = 1)]
//[StructLayout(LayoutKind.Explicit)]
public struct MsgCOMContent
{
//[FieldOffset(0)]
public uint ID;
//[FieldOffset(4)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 21 )]
//[FieldOffset(4), MarshalAs(UnmanagedType.ByValArray, SizeConst = 21)]
public char[] A;
//[FieldOffset(25)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 70)]
//[FieldOffset(25), MarshalAs(UnmanagedType.ByValArray, SizeConst = 70)]
public char[] B;
}
#endregion
自己解决