Zunächst mal solltest du für unmanaged interop besser struct verwenden als Klassen.
(Zumindest habe ich struct verwendet, als ich sowas gemacht habe, ich bin mir daher sicher, dass es geht)
Was die folgende Konvertierung angeht, habe ich die Methoden hier benutzt:
Code:
internal static byte[] struct2bytes<T>(T packet)
where T:struct
{
int size = Marshal.SizeOf(packet);
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(packet, ptr, false);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
internal static T bytes2struct<T>(byte[] bytes)
where T:struct
{
GCHandle
handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
var s = (T)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return s;
}
Insbesondere die Methode
Marshal.PtrToStructure sollte zu deinem Anwendungsfall passen
(Den Namespace
System.Runtime.InteropServices einbinden!)