ホームページ >バックエンド開発 >C++ >ネットワーク送信のために C# 構造体 (CIFSPacket) をバイト配列に変換する方法

ネットワーク送信のために C# 構造体 (CIFSPacket) をバイト配列に変換する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-24 14:47:10934ブラウズ

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

バイト配列の構造内の構造のバイト配列への変換

ネットワークデータ送信は、構造をバイト配列に変換する必要があります。 C#のcifspacketという名前の特定の構造をバイト配列に変換する方法を説明する次の回答:

質問:

単語を使用してネットワークトランスミッションを送信するために、CIFSPACKET構造をバイト配列に変換する方法は?

回答:

マーシャリングは、これを変換する効果的な方法です。 実装:

ヘッダーファイルを含むプログラムの開始に

追加します。
  1. getBytes関数:cifspacket構造をバイト配列に変換する関数を定義します:using System.Runtime.InteropServices;

  2. frombytes関数:バイト配列を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. その他の注意事項:

    文字列フィールドの場合は、最大サイズの100の文字列を示すように
    <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>
    を指​​定します。

例の使用:

send関数:
  • [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
  • 関数の受信:

以上がネットワーク送信のために C# 構造体 (CIFSPacket) をバイト配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。