没有合适的资源?快使用搜索试试~ 我知道了~
C#结构体和C++字节数组的转换
2星 需积分: 44 54 下载量 8 浏览量
2012-03-27
09:54:08
上传
评论 1
收藏 16KB DOCX 举报
温馨提示
试读
2页
在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和VC6.0等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把byte数组转换为结构体,要在C#中发送结构体,可以按此方法实现。
资源推荐
资源详情
资源评论
在写 C#TCP 通信程序时,发送数据时,只能发送 byte 数组,处理起来比较麻烦不说,
如果是和 VC6.0 等写的程序通信的话,很多的都是传送结构体,在 VC6.0 中可以很方便的
把一个 char[]数组转换为一个结构体,而在 C#却不能直接把 byte 数组转换为结构体,要在
C#中发送结构体,可以按以下方法实现:
(1)定义结构体:
//命名空间
usingSystem.Runtime.InteropServices;
//注意这个属性不能少
[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]
structTestStruct
{
publicintc;
//字符串,SizeConst 为字符串的最大长度
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=256)]
publicstringstr;
//int 数组,SizeConst 表示数组的个数,在转换成
//byte 数组前必须先初始化数组,再使用,初始化
//的数组长度必须和 SizeConst 一致,例 test=newint[6];
[MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]
publicint[]test;
}
2)结构体转 byte 数组:
////<summary>
///结构体转 byte 数组
///</summary>
///<paramname="structObj">要转换的结构体</param>
///<returns>转换后的 byte 数组</returns>
publicstaticbyte[]StructToBytes(objectstructObj)
{
//得到结构体的大小
intsize=Marshal.SizeOf(structObj);
//创建 byte 数组
byte[]bytes=newbyte[size];
//分配结构体大小的内存空间
IntPtrstructPtr=Marshal.AllocHGlobal(size);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(structObj,structPtr,false);
//从内存空间拷到 byte 数组
资源评论
- zd8934092692013-10-25挺不错的、、、、
- ligang22552022-02-18word文档乱糟糟,看着费劲
- asweee22015-03-17还行,不错的代码
fangqingivu
- 粉丝: 101
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功