将C ++结构转换为C#
我有一个C ++结构如下:
struct CUSTOM_DATA { int id; u_short port; unsigned long ip; } custom_data;
如何将其转换为C#struct,序列化并通过tcp socket发送?
谢谢!
UPD
那么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); }
这个结构的C#版本将是:
[StructLayout(LayoutKind.Sequential)] public struct CustomData { public int id; public ushort port; public uint ip; }
至于通过套接字发送,你可以直接发送二进制数据。 Marshal类具有从结构获取指针(IntPtr)并复制到字节数组的方法。
[StructLayout(LayoutKind.Sequential)] struct CUSTOM_DATA { int id; ushort port; uint ip; }; CUSTOM_DATA cData ; // use me
编辑: thx reed