简化 C# 结构到字节数组的转换以进行网络传输
跨网络高效传输结构化数据通常需要将 C# 结构转换为字节数组。 虽然结构对相关数据进行分组,但它们并不直接兼容二进制网络传输。
我们举个例子来说明一下:
<code class="language-csharp">public struct CIFSPacket { public uint protocolIdentifier; public byte command; // ... other fields }</code>
要将 CIFSPacket
实例 (packet
) 转换为字节数组,请按照以下步骤操作:
using System.Runtime.InteropServices;
添加到您的代码中。Marshal.SizeOf(packet)
.IntPtr ptr = Marshal.AllocHGlobal(size);
分配非托管内存。Marshal.StructureToPtr(packet, ptr, true);
.byte[] arr = new byte[size]; Marshal.Copy(ptr, arr, 0, size);
.Marshal.FreeHGlobal(ptr);
。此过程将结构转换为网络就绪的字节数组。
相反的过程(字节数组到结构)同样简单:
<code class="language-csharp">public CIFSPacket FromBytes(byte[] arr) { CIFSPacket str = new CIFSPacket(); int size = Marshal.SizeOf(str); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType()); Marshal.FreeHGlobal(ptr); return str; }</code>
对于结构中的字符串字段,请使用 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
属性,将 100
替换为最大字符串长度。
此方法可确保可靠的结构到字节数组的转换,以实现稳健的网络通信。
以上是如何有效地将C#结构转换为网络通信的字节阵列?的详细内容。更多信息请关注PHP中文网其他相关文章!