C#结构体和字节数组的相互转化(转)

public static class StructCopyer
{
    //相当于序列化与反序列化,但是不用借助外部文件
    
//1、struct转换为Byte[]
    public static Byte[] StructToBytes(Object structure)
    {
        Int32 size = Marshal.SizeOf(structure);
        IntPtr buffer = Marshal.AllocHGlobal(size);

        try
        {
            Marshal.StructureToPtr(structure, buffer, false);
            Byte[] bytes = new Byte[size];
            Marshal.Copy(buffer, bytes, 0, size);

            return bytes;
        }
        finally
        {
            Marshal.FreeHGlobal(buffer);
        }

    }

    //2、Byte[]转换为struct
    public static Object BytesToStruct(Byte[] bytes, Type strcutType)
    {
        Int32 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);
        }
    }

}

用法:

//InterfaceStruct为一结构体
InterfaceStruct pInterface = new InterfaceStruct();

pInterface = (InterfaceStruct)BytesToStruct(bytPipeInfo, pInterface.GetType());  


转自:http://www.cnblogs.com/jingmoxukong/articles/2118105.html

posted on 2011-09-30 13:32  一路前行  阅读(704)  评论(0编辑  收藏  举报