如何将结构编组为 UInt16 数组
我知道您可以使用这样的代码将结构编组到字节数组中:
public static byte[] StructureToByteArray(object obj)
{
int len = Marshal.SizeOf(obj);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(obj, ptr, true);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
但是如何将结构编组到包含 16 位字而不是字节的数组中?
public static UInt16[] StructureToUInt16Array(object obj)
{
// What to do?
}
I know that you can use code like this to marshal a structure into a byte array:
public static byte[] StructureToByteArray(object obj)
{
int len = Marshal.SizeOf(obj);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(obj, ptr, true);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
But how do you marshal a structure into an array containing 16 bit words instead of bytes?
public static UInt16[] StructureToUInt16Array(object obj)
{
// What to do?
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不安全和安全的方法:
更新以反映他人的智慧。
The Unsafe and the Safe way to do this:
Updated to reflect the wisdom of others.
有什么理由不编组到字节数组然后使用 Buffer.BlockCopy 吗?我想说,这将是最简单的方法。诚然,您确实必须进行适当的复制,因此效率较低,但我认为您不会找到更简单的方法。
Any reason not to marshal into a byte array and then use
Buffer.BlockCopy
? That would be the simplest approach, I'd say. Admittedly you do have to do appropriate copying, so it's less efficient, but I don't think you'll find a much simpler way.