如何将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
自己解决
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
自己解决
相关文章推荐
- 再谈如何以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
- Windows Phone 8 学习志(探索问题一:如何简单利用Windows Phone Runtime Component项目类型实现C#和C++交互)
- 7-8 点赞(20 分) 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串
- 【原创】C++链表如何像Python List一样支持多种数据类型
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串
- 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
- (转载)你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
- 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
- C++中四种类型转换方式
- 如何构造一个元素类型为Struct的SafeArray
- 如何构造一个元素类型为Struct的SafeArray
- 【和贺老师一起做C++项目】WEEK1用枚举表示对称方式
- Memcache仅仅支持简单数据类型
- 重拾C/C++ 使用Struct结构建立简单的链表
- c++基础:如何string类型转换为int类型
- c++基础:如何string类型转换为int类型
- MFC之头文件相互包含问题及解决方法 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
- 比较比较C++中的static_cast、dynamic_cast、reinterpret_cast类型转换方式
- C++中struct和class的区别及C++ this变量和const变量类型