Feedback

C# - Kopierroutinen object <-> byte[]

Veröffentlicht von am 09.03.2006
(4 Bewertungen)
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

/// <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!