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 @ 2010-05-06 10:45  逆时针  阅读(988)  评论(0编辑  收藏  举报