Heim > Backend-Entwicklung > C++ > Wie konvertieren Sie C# -Strukturen in Byte -Arrays für Socket -Kommunikation?

Wie konvertieren Sie C# -Strukturen in Byte -Arrays für Socket -Kommunikation?

Patricia Arquette
Freigeben: 2025-01-24 14:41:12
Original
999 Leute haben es durchsucht

How to Convert C# Structures to Byte Arrays for Socket Communication?

Die gegenseitige Umwandlung der Struktur und des Byte -Arrays in der Struktur im C#

Bei Verwendung einer Slot -Kommunikation in C#muss die Struktur in Byte -Array umgewandelt werden. Dies kann durch den Marschallmechanismus implementiert werden.

Strukturdefinition

Betrachten Sie die folgende Struktur:

<code class="language-csharp">public struct CIFSPacket
{
    // 字段定义...
    public string Buffer;
}</code>
Nach dem Login kopieren
Marshaling (serialisiert)

Die

Marschallklasse bietet Datendichtungsverarbeitung zwischen dem Hosting -Code und dem Nicht -Host -Code. Konvertieren Sie die Struktur in Byte -Array:

<code class="language-csharp">using System.Runtime.InteropServices;

public static byte[] GetBytes(CIFSPacket str)
{
    int size = Marshal.SizeOf(str);
    byte[] arr = new byte[size];

    IntPtr ptr = IntPtr.Zero;
    try
    {
        ptr = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(str, ptr, true);
        Marshal.Copy(ptr, arr, 0, size);
    }
    finally
    {
        Marshal.FreeHGlobal(ptr);
    }
    return arr;
}</code>
Nach dem Login kopieren
Unmarshalling

Das Byte -Array wird zurück in die Struktur umgewandelt:

Marshaling
<code class="language-csharp">public static CIFSPacket FromBytes(byte[] arr)
{
    CIFSPacket str = new CIFSPacket();

    int size = Marshal.SizeOf(str);
    IntPtr ptr = IntPtr.Zero;
    try
    {
        ptr = Marshal.AllocHGlobal(size);

        Marshal.Copy(arr, 0, ptr, size);

        str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType());
    }
    finally
    {
        Marshal.FreeHGlobal(ptr);
    }
    return str;
}</code>
Nach dem Login kopieren

Verwenden Sie bei der Versiegelung der Zeichenfolge in der Verarbeitungsstruktur die Darstellung des angegebenen Attributs für die angegebene Zeichenfolge. Für

eine solche feste Länge in der Beispielstruktur verwenden Sie bitte:

[MarshalAs] Buffer Die von 100 wird durch die maximale Saitenlänge ersetzt.

<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;</code>
Nach dem Login kopieren
Zusammenfassung

Durch die Verwendung von Marschagen kann die Struktur für die Datenübertragung leicht in Byte -Array umgewandelt werden. Diese Technologie wird normalerweise in Netzwerkanwendungen verwendet, z. B. in Senden und Empfangen von Nachrichten durch Sockets.

Das obige ist der detaillierte Inhalt vonWie konvertieren Sie C# -Strukturen in Byte -Arrays für Socket -Kommunikation?. 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