byte[]和结构互转
来源:互联网 发布:高铭的书真实的吗 知乎 编辑:程序博客网 时间:2024/06/05 07:37
//struct转byte[]
public byte[] StructTOBytes(object obj)
{int size = Marshal.SizeOf(obj);
//创建byte数组
byte[] bytes = new byte[size];
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将结构体拷贝到分配好的内存空间
Marshal.StructureToPtr(obj, structPtr, false);
//从内存空间拷贝到byte数组
Marshal.Copy(structPtr, bytes, 0, size);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
return bytes;
}
/// 结构体List转byte数组
public static byte[] StructToBytes(List<Student> list)
{
//得到结构体的大小
int iItemSize = Marshal.SizeOf(typeof(Student));
int size = iItemSize * list.Count;
//创建byte数组
byte[] bytes = new byte[size];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(iItemSize);
int iBeginIndex = 0;
foreach (Student item in list)
{
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(item, structPtr, true);
//从内存空间拷到byte数组
Marshal.Copy(structPtr, bytes, iBeginIndex, iItemSize);
iBeginIndex = iBeginIndex + iItemSize;
}
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回byte数组
return bytes;
}
//byte[]转换为struct
public object BytesToStruct(byte[] bytes, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, 0, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
调用: student m = new student();
student a = (student)BytesToStruct(buffer, m.GetType());
如果student中有string类型的要申明string占用固定长度
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string StrudentName;
- byte[]和结构互转
- C#通信,结构体和byte数组互转
- byte数组和结构体相互转换
- Golang中结构体转byte数组
- C#byte数组转结构体
- byte和byte数组
- 关于C#结构体和byte[]之间的转换
- c#结构体和byte[]之间的转换
- C#中结构体和byte数组的转化
- C# 转换uint,byte[],char[],string, short[]<->byte[] 结构体和字节数组转化
- java 中 int和byte数组互转
- byte数据和String字符串互转问题
- java 里面的string 和byte[] 怎么互转?
- java 里面的string 和byte[] 怎么互转?
- java对象和byte数组互转,直接拿去用
- C# int和byte之间的互转
- Java中String和byte[]互转问题
- Byte[]和byte[]的转换
- RabbitMq 相关知识整理
- 常用控件之listview
- angular中使用multiselect实现二级下拉联动
- Linux常用指令—grep(搜索过滤)
- JaxWs基于消息编程
- byte[]和结构互转
- 关于C++输入的一些总结
- sklearn学习笔记之Kmeans聚类
- VS2013 查看程序各个函数的CPU利用率
- 4分钟_教你使用phpStudy在一个服务器上挂载多个网站
- 指针(Pointer)
- Windows环境配置SBT并创建Scala项目
- HW6UL-LITE 开发板简介
- Basler|CImageEventHandler类