C++中取出的字节数组转为结构
2012-12-11 11:09
465 查看
byte[] BytePara = 为从C++里取出的字节数组;
InfoDataStruct 为结构,循环将Byte数组里的内容转换为结构
InfoDataStruct* p = (InfoDataStruct*)(BytePara+ (i * 55));
InfoDataStruct dataStruct= BytesToStruct<InfoDataStruct>(BytePara, (i * 55));
///不使用泛型,会使得编码繁琐。
public static object BytesToStruct(byte[] bytes, int startIndex, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, startIndex, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
/// <summary>
/// byte数组转为结构
/// </summary>
/// <typeparam name="T">结构</typeparam>
/// <param name="bytes">数组</param>
/// <param name="startIndex">起始位置</param>
/// <returns></returns>
public static T BytesToStruct<T>(byte[] bytes, int startIndex)
{
T Obj = default(T);
Type strcutType = typeof(T);
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, startIndex, buffer, size);
Obj= (T) Marshal.PtrToStructure(buffer, strcutType);
return Obj;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
InfoDataStruct 为结构,循环将Byte数组里的内容转换为结构
InfoDataStruct* p = (InfoDataStruct*)(BytePara+ (i * 55));
InfoDataStruct dataStruct= BytesToStruct<InfoDataStruct>(BytePara, (i * 55));
///不使用泛型,会使得编码繁琐。
public static object BytesToStruct(byte[] bytes, int startIndex, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, startIndex, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
/// <summary>
/// byte数组转为结构
/// </summary>
/// <typeparam name="T">结构</typeparam>
/// <param name="bytes">数组</param>
/// <param name="startIndex">起始位置</param>
/// <returns></returns>
public static T BytesToStruct<T>(byte[] bytes, int startIndex)
{
T Obj = default(T);
Type strcutType = typeof(T);
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, startIndex, buffer, size);
Obj= (T) Marshal.PtrToStructure(buffer, strcutType);
return Obj;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
相关文章推荐
- C/C++结构体内尾部0字节字符数组技巧
- [C++]字节对齐与结构体大小
- 【C++】动态结构数组简单运用
- C++学习笔记(一)--整形,std输出,浮点数,数组,字符串,结构,指针,循环
- C++ 堆结构(数组实现)
- C++字节对齐与结构体大小计算
- C++之字节对齐与结构体大小
- 字符串逆序,字符串转为字符数组 、字符串转字节数组,字节数组转字符串、java中String、StringBuffer、StringBuilder
- C++ 数据结构线性表-数组实现
- (转载)你好,C++(23) 4.4.2 工资程序成长记:用数组处理批量数据,用循环结构执行重复动作
- C++程序设计语言--第五章:指针、数组和结构
- 打造 C++ 最灵活动态数组结构 (三)
- [C++]字节对齐与结构体大小
- [C++]字节对齐与结构体大小
- C++指针、数组和结构
- 如何使用opencv的c++接口来读取、写结构体数组到xml文件中
- C++学习笔记2--函数重载 复杂的数据 内存对齐 指针数组 结构与指针 传值传址传引用 联合枚举类型别名
- 第03章 CORE C++_枚举_数组_结构_指针(I)
- C++将8字节的long long转换成char数组
- [C++]字节对齐与结构体大小