public partial class Form1 : Form

{
public Form1()

{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)

{
Demo d = new Demo();
d.a = 5;
d.b = 10;

d.c = new byte[]
{1,2,3};
d.s = "123";
byte[] buf = RawFormatter.RawSerialize(d);


MessageBox.Show("aaa");
}
}

[StructLayout(LayoutKind.Sequential,Pack=1,CharSet=CharSet.Ansi)]
struct Demo

{
public byte a;
public int b;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] c;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string s;
}

public class RawFormatter

{
public static byte[] RawSerialize(object anything)

{
int rawsize = Marshal.SizeOf(anything);
IntPtr buffer = Marshal.AllocHGlobal(rawsize);
Marshal.StructureToPtr(anything, buffer, false);
byte[] rawdatas = new byte[rawsize];
Marshal.Copy(buffer, rawdatas, 0, rawsize);
Marshal.FreeHGlobal(buffer);
return rawdatas;
}

public static object RawDeserialize(byte[] rawdatas, Type anytype)

{
int rawsize = Marshal.SizeOf(anytype);
if (rawsize > rawdatas.Length)
return null;
IntPtr buffer = Marshal.AllocHGlobal(rawsize);
Marshal.Copy(rawdatas, 0, buffer, rawsize);
object retobj = Marshal.PtrToStructure(buffer, anytype);
Marshal.FreeHGlobal(buffer);
return retobj;
}
}

QQ:273352165
evlon#126.com
转载请注明出处。