Tukar struktur kepada tatasusunan bait dalam C#
Dalam C#, menukar struktur kepada tatasusunan bait ialah teknik biasa untuk penghantaran data rangkaian atau penyimpanan data binari. Panduan ini akan menunjukkan cara melakukan ini menggunakan Marshaling.
Kod yang anda berikan mentakrifkan struktur yang dipanggil CIFSPacket, yang mengandungi pelbagai medan yang mewakili paket rangkaian. Untuk menukar struktur ini kepada tatasusunan bait, ikuti langkah berikut:
<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>
Sila ambil perhatian bahawa untuk medan rentetan Penampan dalam CIFSPacket, anda mungkin perlu menentukan sifat Marshaling agar ia berfungsi dengan betul dengan Marshaling. Berikut ialah contoh:
<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string Buffer;</code>
Ingat untuk menetapkan nilai SizeConst berdasarkan saiz maksimum jangkaan rentetan Penampan.
Dengan fungsi ini, anda boleh menukar struktur CIFSPacket dengan mudah kepada tatasusunan bait menggunakan GetBytes() dan kembali daripada tatasusunan bait menggunakan FromBytes(). Ini menyediakan cara mudah untuk memanipulasi dan memindahkan struktur anda dalam format binari.
Atas ialah kandungan terperinci Bagaimana cara menukar struktur C# ke array byte menggunakan marshaling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!