バイト配列の構造内の構造のバイト配列への変換
ネットワークデータ送信は、構造をバイト配列に変換する必要があります。 C#のcifspacketという名前の特定の構造をバイト配列に変換する方法を説明する次の回答:
質問:
単語を使用してネットワークトランスミッションを送信するために、CIFSPACKET構造をバイト配列に変換する方法は?
回答:マーシャリングは、これを変換する効果的な方法です。 実装:
ヘッダーファイルを含む:プログラムの開始に
追加します。
using System.Runtime.InteropServices;
<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>
文字列フィールドの場合は、最大サイズの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 サイトの他の関連記事を参照してください。