我有一个对象
struct _NETINFO { }
我想使用 Compact Framework 将其转换为 Byte[],我尝试了以下操作但没有成功:
_NETINFO info = new _NETINFO();
byte[] buffer = (byte[])info;
它不起作用!我发现的唯一其他建议是使用在 CF 中不可用的 BinaryFormatter!
还有其他建议吗?
最佳答案
结构有多复杂?对于没有指向其他内容的指针的简单事情,这很容易:
var info = new _NETINFO();
var buffer = new byte[Marshal.SizeOf(info)];
var handle = GCHandle.Alloc(info, GCHandleType.Pinned);
try
{
Marshal.Copy(handle.AddrOfPinnedObject(), buffer, 0, buffer.Length);
}
finally
{
handle.Free();
}
还有一个使用不安全代码的版本更短,但这需要打开“允许不安全代码”,并且出于某种原因让一些人感到 panic 。
Wish 托管代码允许在没有副本的情况下执行此操作(或相反 - 将字节数组转换为结构),但遗憾的是它没有。
关于serialization - 如何使用 Compact Framework 对对象进行二进制序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897073/