从结构中获取字节数组以通过 TCP 套接字发送的最佳方法是什么?我正在使用 .Net(VB 或 C#)。
最佳答案
一种选择是将结构的 native 表示直接编码到缓冲区中,类似于 memcpy
在 C 中的工作方式。
您需要将适当的属性添加到您的结构中,
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack=1)]
然后您可以使用以下方式对其进行序列化:
/// <summary>
/// Serializes the specified object into a byte array.
/// </summary>
/// <param name="nativeObject">The object to serialize.</param>
/// <returns></returns>
public static byte[] Serialize(object obj)
{
Type objectType = obj.GetType();
int objectSize = Marshal.SizeOf(obj);
IntPtr buffer = Marshal.AllocHGlobal(objectSize);
Marshal.StructureToPtr(obj, buffer, false);
byte[] array = new byte[objectSize];
Marshal.Copy(buffer, array , 0, objectSize);
Marshal.FreeHGlobal(buffer);
return array;
}
不过,这是迄今为止最不便携的解决方案。双方都需要使用相同的对齐方式和字节顺序,如果您需要更改结构本身,则需要自己实现版本控制。
在大多数情况下,您的序列化格式不应是内部数据结构的直接副本。
关于.net - 结构到字节数组以通过套接字发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/650815/