Memperkemaskan Struktur C# kepada Penukaran Tatasusunan Bait untuk Penghantaran Rangkaian
Menghantar data berstruktur dengan cekap merentas rangkaian selalunya memerlukan penukaran struktur C# kepada tatasusunan bait. Walaupun struktur mengumpulkan data berkaitan, ia tidak serasi secara langsung dengan penghantaran rangkaian binari.
Mari kita ilustrasikan dengan contoh:
<code class="language-csharp">public struct CIFSPacket { public uint protocolIdentifier; public byte command; // ... other fields }</code>
Untuk menukar CIFSPacket
tika (packet
) kepada tatasusunan bait, ikut langkah berikut:
using System.Runtime.InteropServices;
pada kod anda.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);
.Proses ini menukar struktur kepada tatasusunan bait sedia rangkaian.
Proses terbalik (tatasusunan bait ke struktur) adalah sama mudah:
<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>
Untuk medan rentetan dalam struktur anda, gunakan atribut [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
, menggantikan 100
dengan panjang rentetan maksimum.
Kaedah ini memastikan penukaran tatasusunan struktur-ke-bait yang boleh dipercayai untuk komunikasi rangkaian yang mantap.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Struktur C# kepada Tatasusunan Byte untuk Komunikasi Rangkaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!