Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Struktur C# (CIFSPacket) kepada Array Byte untuk Penghantaran Rangkaian?
Penukaran struktur kepada tatasusunan bait dalam C#
Penghantaran data rangkaian memerlukan penukaran struktur kepada tatasusunan bait. Jawapan berikut menerangkan cara menukar struct tertentu bernama CIFSPacket kepada tatasusunan bait dalam C#:
Soalan:
Bagaimana untuk menukar struktur CIFSPacket kepada tatasusunan bait untuk penghantaran rangkaian melalui soket?
Jawapan:
Menggunakan Marshaling ialah cara yang cekap untuk melakukan penukaran ini.
Pelaksanaan:
Sertakan fail pengepala: Tambahkan using System.Runtime.InteropServices;
pada permulaan program.
fungsi getBytes: Tentukan fungsi untuk menukar struktur CIFSPacket kepada tatasusunan bait:
<code class="language-csharp"> 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>
FromBytes function: Mentakrifkan fungsi untuk menukar tatasusunan bait kembali kepada struktur CIFSPacket:
<code class="language-csharp"> 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>
Nota lain:
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
untuk mewakili rentetan dengan saiz maksimum 100. Contoh penggunaan:
Fungsi penghantaran:
<code class="language-csharp">byte[] byteArr = getBytes(packet); MyPing.SendTo(byteArr);</code>
Fungsi terima:
<code class="language-csharp">byte[] receivedArr = null; // 接收数据包 CIFSPacket receivedPacket = fromBytes(receivedArr);</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Struktur C# (CIFSPacket) kepada Array Byte untuk Penghantaran Rangkaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!