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
1002 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:

     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;
     }
    Salin selepas log masuk
  3. FromBytes function: Mentakrifkan fungsi untuk menukar tatasusunan bait kembali kepada struktur CIFSPacket:

     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;
     }
    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:

byte[] byteArr = getBytes(packet);
MyPing.SendTo(byteArr);
Salin selepas log masuk

Fungsi terima:

byte[] receivedArr = null; // 接收数据包
CIFSPacket receivedPacket = fromBytes(receivedArr);
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!

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