Heim > Backend-Entwicklung > C++ > Wie kann ich C# Strukturen effizient in Byte -Arrays für die Netzwerkkommunikation konvertieren?

Wie kann ich C# Strukturen effizient in Byte -Arrays für die Netzwerkkommunikation konvertieren?

Barbara Streisand
Freigeben: 2025-01-24 14:51:10
Original
217 Leute haben es durchsucht

How to Efficiently Convert C# Structures to Byte Arrays for Network Communication?

Streamlining C# Struktur zu Byte -Array -Konvertierung für die Netzwerkübertragung

effizient übertragen, die strukturierte Daten über Netzwerke hinweg übertragen werden, müssen häufig C# -Strukturen in Byte -Arrays umwandeln. Während struktursgruppenbezogene Daten, sind sie nicht direkt mit der binären Netzwerkübertragung kompatibel.

veranschaulichen wir mit einem Beispiel:

<code class="language-csharp">public struct CIFSPacket
{
    public uint protocolIdentifier;
    public byte command;
    // ... other fields
}</code>
Nach dem Login kopieren

Um eine CIFSPacket Instanz (packet) in ein Byte -Array zu verwandeln, folgen Sie folgenden Schritten:

  1. Marshaling importieren: add using System.Runtime.InteropServices; zu Ihrem Code addieren.
  2. Größenbestimmung: Berechnen Sie die Größe der Struktur in Bytes mit Marshal.SizeOf(packet).
  3. Speicherzuweisung: Nicht verwalteten Speicher mit IntPtr ptr = Marshal.AllocHGlobal(size);.
  4. zuweisen
  5. Struktur Marschhaling: Kopieren Sie die Struktur in das zugewiesene Speicher: Marshal.StructureToPtr(packet, ptr, true);.
  6. Byte -Array -Erstellung: Erstellen Sie ein Byte -Array und kopieren Sie die Daten: byte[] arr = new byte[size]; Marshal.Copy(ptr, arr, 0, size);.
  7. Speicherfreigabe: Freie das nicht verwaltete Speicher: Marshal.FreeHGlobal(ptr);.

Dieser Prozess wandelt die Struktur in ein netzwerkbereites Byte-Array um.

Der umgekehrte Vorgang (Byte -Array zur Struktur) ist ebenso einfach:

<code class="language-csharp">public CIFSPacket FromBytes(byte[] arr)
{
    CIFSPacket str = new CIFSPacket();
    int size = Marshal.SizeOf(str);
    IntPtr ptr = Marshal.AllocHGlobal(size);
    Marshal.Copy(arr, 0, ptr, size);
    str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType());
    Marshal.FreeHGlobal(ptr);
    return str;
}</code>
Nach dem Login kopieren

Verwenden Sie für Zeichenfolgenfelder in Ihren Strukturen das Attribut [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] und ersetzen Sie 100 durch die maximale Zeichenfolgenlänge.

Diese Methode sorgt für eine zuverlässige Konvertierung von Struktur-zu-Byte-Array für eine robuste Netzwerkkommunikation.

Das obige ist der detaillierte Inhalt vonWie kann ich C# Strukturen effizient in Byte -Arrays für die Netzwerkkommunikation konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage