Feedback

C# - Kopierroutinen object <-> byte[]

Veröffentlicht von am 09.03.2006
(4 Bewertungen)
/// <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;
}

Abgelegt unter Kopierroutinen, object, byte, kopieren.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!