Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar Struktur C# (CIFSPacket) kepada Array Byte untuk Penghantaran Rangkaian?

Bagaimana untuk Menukar Struktur C# (CIFSPacket) kepada Array Byte untuk Penghantaran Rangkaian?

Barbara Streisand
Lepaskan: 2025-01-24 14:47:10
asal
932 orang telah melayarinya

How to Convert a C# Structure (CIFSPacket) to a Byte Array for Network Transmission?

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:

  1. Sertakan fail pengepala: Tambahkan using System.Runtime.InteropServices; pada permulaan program.

  2. 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>
    Salin selepas log masuk
  3. 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>
    Salin selepas log masuk

Nota lain:

  • Untuk medan rentetan, nyatakan [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>
Salin selepas log masuk

Fungsi terima:

<code class="language-csharp">byte[] receivedArr = null; // 接收数据包
CIFSPacket receivedPacket = fromBytes(receivedArr);</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan