您的位置:首页 > 编程语言 > C语言/C++

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

2008-04-08 11:17 453 查看
++的结构体如下,需要用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

自己解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐