Die gegenseitige Umwandlung der Struktur und des Byte -Arrays in der Struktur im C#
Strukturdefinition
<code class="language-csharp">public struct CIFSPacket { // 字段定义... public string Buffer; }</code>
<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>
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>
[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>
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!