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>
Um eine CIFSPacket
Instanz (packet
) in ein Byte -Array zu verwandeln, folgen Sie folgenden Schritten:
using System.Runtime.InteropServices;
zu Ihrem Code addieren. Marshal.SizeOf(packet)
. IntPtr ptr = Marshal.AllocHGlobal(size);
. Marshal.StructureToPtr(packet, ptr, true);
. byte[] arr = new byte[size]; Marshal.Copy(ptr, arr, 0, size);
. 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>
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!