Heim > Backend-Entwicklung > C++ > Wie konvertieren Sie eine C# -Struktur mit Marschagen in ein Byte -Array?

Wie konvertieren Sie eine C# -Struktur mit Marschagen in ein Byte -Array?

Mary-Kate Olsen
Freigeben: 2025-01-24 14:57:13
Original
941 Leute haben es durchsucht

How to Convert a C# Structure to a Byte Array Using Marshaling?

In der C#wird die Struktur in Byte -Array umgewandelt

In C#ist die Konvertierung der Struktur in Byte -Array eine gemeinsame Technik für die Übertragung von Netzwerkdaten oder die Binärdatenspeicherung. Dieser Leitfaden zeigt, wie das Marschall verwendet wird, um diesen Vorgang abzuschließen.

Der von Ihnen angegebene Code definiert eine Struktur namens CIFSpacket, die verschiedene Felder enthält, die das Netzwerkdatenpaket darstellen. Um diese Struktur in Byte -Array umzuwandeln, befolgen Sie die folgenden Schritte:

<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;
}

// 将字节数组转换为结构体的函数
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
Bitte beachten Sie, dass Sie für das Feld Puffer String in CIFSpacket möglicherweise die Marshaling -Eigenschaft angeben müssen, damit sie mit dem Marshaling korrekt verwendet wird. Das Folgende ist ein Beispiel:

<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;</code>
Nach dem Login kopieren
Denken Sie daran, den SizeConst -Wert gemäß der maximal erwarteten Größe der Pufferzeichenfolge festlegen.

Mit diesen Funktionen können Sie mit GetByTes () die CIFSpacket -Struktur einfach in Byte -Array umwandeln und von Bytes () aus dem Byte -Array zurückkehren. Dies bietet eine bequeme Methode, um Ihre Struktur in Binärformaten zu bedienen und zu übertragen.

Das obige ist der detaillierte Inhalt vonWie konvertieren Sie eine C# -Struktur mit Marschagen in ein Byte -Array?. 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