7

以下に C++ 構造体があります。

struct CUSTOM_DATA {
   int id;
   u_short port;
   unsigned long ip;
} custom_data;

それをC#構造体に変換し、シリアル化し、tcpソケット経由で送信するにはどうすればよいですか?

ありがとう!

更新

では、C# コードはどうなるでしょうか。

[StructLayout(LayoutKind.Sequential)]
public struct CustomData
{
 public int id;
 public ushort port;
 public uint ip;
}

public void Send()
{
 CustomData d = new CustomData();
 d.id = 12;
 d.port = 1000;
 d.ip = BitConverter.ToUInt32(IPAddress.Any.GetAddressBytes(), 0);
 IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(d));
 Marshal.StructureToPtr(d, pointer, false);
 byte[] data_to_send = new byte[Marshal.SizeOf(d)];
 Marshal.Copy(pointer, data_to_send, 0, data_to_send.Length);
 client.GetStream().Write(data_to_send, 0, data_to_send.Length);
}
4

2 に答える 2

11

この構造体の C# バージョンは次のようになります。

[StructLayout(LayoutKind.Sequential)]
public struct CustomData
{
    public int id;
    public ushort port;
    public uint ip;
}

これをソケット経由で送信する場合は、バイナリ データを直接送信するだけです。Marshal クラスには、構造体からポインター (IntPtr) を取得し、バイト配列にコピーするためのメソッドがあります。

于 2012-05-31T18:06:43.573 に答える
1
[StructLayout(LayoutKind.Sequential)]
struct CUSTOM_DATA {
   int id;
   ushort port;
   uint ip;
};
CUSTOM_DATA cData ; // use me 

編集: thxリード

于 2012-05-31T18:07:58.287 に答える