struct和byte[]相互转换(用Marshal类实现)

相当于序列化与反序列化,但是不用借助外部文件

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);  
  }  
  }
posted @ 2006-12-28 13:55  小y  阅读(4112)  评论(2编辑  收藏  举报