将C++结构转换为 C#
本文关键字:转换 结构 C++ | 更新日期: 2023-09-27 18:35:50
我在下面有一个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);
}
此结构的 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
编辑:谢谢里德