//byte数组转结构体: /**//// <summary>
/// byte数组转结构体
/// </summary>
/// <param name="bytes">byte数组</param>
/// <param name="type">结构体类型</param>
/// <returns>转换后的结构体</returns>
public static object BytesToStuct(byte[] bytes,Type type)
...{
//得到结构体的大小
int size = Marshal.SizeOf(type);
//byte数组长度小于结构体的大小
if (size > bytes.Length)
...{
//返回空
return null;
}
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将byte数组拷到分配好的内存空间
Marshal.Copy(bytes,0,structPtr,size);
//将内存空间转换为目标结构体
object obj = Marshal.PtrToStructure(structPtr, type);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回结构体
return obj;
}
参数type该怎么定义啊 怎么定义都不对呢 郁闷
Type不是System命名空间下的一个类么?你要自己定义?
if(bytes.length<size )
方法里的参数该怎么写 总不能写System.Type吧 - -
我用 Type type = typeof(Struct);
结果这句 //得到结构体的大小 int size = Marshal.SizeOf(type);出错了错误是:不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。