buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理
相当于序列化与反序列化,但是不用借助外部文件

1、struct转换为byte[]
static   byte[]   StructToBytes(object   structObj)  
  {  
  int   size   =     Marshal.SizeOf(structObj);  
  IntPtr   buffer   =   Marshal.AllocHGlobal(size);  
  try  
  {  
  Marshal.StructureToPtr(structObj,   buffer,   false);  
  byte[]   bytes   =   new   byte[size];  
  Marshal.Copy(buffer,   bytes,   0,   size);  
  return   bytes;  
  }  
  finally  
  {  
  Marshal.FreeHGlobal(buffer);  
  }  
   
  }   
   2、byte[]转换为struct
  static   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);  
  }  
  }
---------------------------------------------------------------------
原文链接:http://www.cnblogs.com/tuyile006/archive/2006/12/28/605962.html

Feedback

# 试问楼主这样转换效率如何   回复  更多评论   

2009-04-29 22:29 by 萝卜大叔
申请一块内存做中转,楼主的内存资源真是丰富
可以尝试通过指针直接进行内存复制

# re: [zz] struct和byte[]相互转换(用Marshal类实现)   回复  更多评论   

2009-05-01 23:07 by buf
@萝卜大叔
对.net不熟悉,看到别人的代码,也就这样用了,不好的地方请不吝赐教:-)

# re: [zz] struct和byte[]相互转换(用Marshal类实现)   回复  更多评论   

2012-03-03 18:41 by 青蛙
@萝卜大叔
确实。
只有注册用户登录后才能发表评论。