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);
    }
}

 

你可能感兴趣的:(marshal)