C#数组和结构体转换时,老报错什么问题

做一只好猿 2015-07-14 09:38:43
我现在用C#写一个UDP的程序,而UDP只能收发byte数组,而下位机要求的格式是结构体,因此我用如下代码进行转换,发的时候没有问题,收到的时候把数组转换成结构体就会报错说“访问受保护的内存”,一直解决不了。求大神帮忙啊~



private static byte[] StrutsToBytesArray(object obj)//将结构体序列化 结构体到byte[]
{
int rawsize = Marshal.SizeOf(obj);//得到结构体的大小
IntPtr buffer = Marshal.AllocHGlobal(rawsize);//分配结构体大小的内存空间
Marshal.StructureToPtr(obj, buffer, false);//将结构体拷到分配好的内存空间
byte[] rawdatas = new byte[rawsize]; //创建byte数组
Marshal.Copy(buffer, rawdatas, 0, rawsize);//从内存空间拷到byte数组
Marshal.FreeHGlobal(buffer);//释放内存空间
return rawdatas;//返回byte数组
}
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
做一只好猿 2015-07-14
  • 打赏
  • 举报
回复
这个是我的结构体定义 public struct UDP_data { public int packIndex;//包序号 public int type;//数据类型 public int length;//数据长度 public byte[] data;//数据体 } 这个是结构体转数组和数组转结构体的代码 public static object BytesToStruts(byte[] bytes, Type UDP_data) { int size = Marshal.SizeOf(UDP_data); //得到结构体的大小 if (size > bytes.Length)//byte数组长度小于结构体的大小 { return null;//返回空 } IntPtr structPtr = Marshal.AllocHGlobal(size);//分配结构体大小的内存空间 Marshal.Copy(bytes, 0, structPtr, size);//将byte数组拷到分配好的内存空间 object obj = Marshal.PtrToStructure(structPtr, UDP_data);//将内存空间转换为目标结构体 Marshal.FreeHGlobal(structPtr);//释放内存空间 structPtr return obj;//返回结构体 } private static byte[] StrutsToBytesArray(object obj)//将结构体序列化 结构体到byte[] { int rawsize = Marshal.SizeOf(obj);//得到结构体的大小 IntPtr buffer = Marshal.AllocHGlobal(rawsize);//分配结构体大小的内存空间 Marshal.StructureToPtr(obj, buffer, false);//将结构体拷到分配好的内存空间 byte[] rawdatas = new byte[rawsize]; //创建byte数组 Marshal.Copy(buffer, rawdatas, 0, rawsize);//从内存空间拷到byte数组 Marshal.FreeHGlobal(buffer);//释放内存空间 return rawdatas;//返回byte数组 } 代码大同小异,就是接收过来之后,从数组转到结构体的时候会报上边图片那个错误
tcmakebest 2015-07-14
  • 打赏
  • 举报
回复
结构体的定义代码呢, 有没有用 StructLayout 属性, 这个应该很重要的.
格拉 2015-07-14
  • 打赏
  • 举报
回复
改成指针,通过指针转成结构体
exception92 2015-07-14
  • 打赏
  • 举报
回复
你贴的代码 跟你的截图代码一样么??

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧