首頁 > 後端開發 > C++ > 如何將C#結構體(CIFSPacket)轉換為位元組數組進行網路傳輸?

如何將C#結構體(CIFSPacket)轉換為位元組數組進行網路傳輸?

Barbara Streisand
發布: 2025-01-24 14:47:10
原創
932 人瀏覽過

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

C# 中結構體到位元組數組的轉換

網路資料傳輸需要將結構體轉換為位元組數組。以下解答說明如何將名為 CIFSPacket 的特定結構體在 C# 中轉換為位元組數組:

問題:

如何將 CIFSPacket 結構體轉換為位元組數組,以便透過套接字進行網路傳輸?

解答:

使用 Marshaling 是進行此轉換的有效方法。

實作:

  1. 包含頭檔: 在程式開頭加上 using System.Runtime.InteropServices;

  2. getBytes 函數: 定義一個函數,用於將 CIFSPacket 結構體轉換為位元組數組:

    <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>
    登入後複製
  3. fromBytes 函數: 定義一個函數,用於將位元組陣列轉換回 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>
    登入後複製

其他注意事項:

  • 對於字串字段,請指定 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] 來表示最大大小為 100 的字串。

範例用法:

傳送函數:

<code class="language-csharp">byte[] byteArr = getBytes(packet);
MyPing.SendTo(byteArr);</code>
登入後複製

接收函數:

<code class="language-csharp">byte[] receivedArr = null; // 接收数据包
CIFSPacket receivedPacket = fromBytes(receivedArr);</code>
登入後複製

以上是如何將C#結構體(CIFSPacket)轉換為位元組數組進行網路傳輸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板