如何将c++的struct表示为C#,并把 bytes? Marshal的方式仅支持简单类型,不支持char A[20]的形式。

++的结构体如下,需要用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

自己解决 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值