/// <summary>
/// Kopiert den Inhalt eines Objekts in ein Bytearray
/// </summary>
/// <param name="Source">Quelle aus der die Daten gelesen werden</param>
/// <returns>Liefert ein Bytearray mit den Daten des Objekts</returns>
public static byte[] CopyToByteArray(object Source)
{
int len = Marshal.SizeOf(Source);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(Source, ptr, true);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
/// <summary>
/// Kopiert den Inhalt eines Bytearrays in ein Objekt
/// </summary>
/// <param name="Source">Quelle aus der die Daten gelesen werden</param>
/// <param name="Destination">Ziel in der die Daten abgelegt werden sollen</param>
public static void CopyFromByteArray(byte[] Source, Object Destination)
{
int len = Marshal.SizeOf(Destination);
if (len != Source.Length)
throw new Exception("CopyFromByteArray: SizeOf(Source) != SizeOf(Destination)");
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.Copy(Source, 0, ptr, len);
Marshal.PtrToStructure(ptr, Destination);
Marshal.FreeHGlobal(ptr);
}
/// <summary>
/// Kopiert den Inhalt eines Bytearrays in ein Objekt
/// </summary>
/// <typeparam name="T">Typ des Zielobjekts</typeparam>
/// <param name="Source">Quelle aus der die Daten gelesen werden</param>
/// <returns>Liefert ein Objekt vom Typ T mit den Daten des Bytearrays</returns>
public static T CopyFromByteArray<T>(byte[] Source)
{
int len = Marshal.SizeOf(typeof(T));
if (len != Source.Length)
throw new Exception("CopyFromByteArray: SizeOf(Source) != SizeOf(T)");
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.Copy(Source, 0, ptr, len);
T NewObject = (T)Marshal.PtrToStructure(ptr, typeof(T));
Marshal.FreeHGlobal(ptr);
return NewObject;
}