我有一个对象
struct _NETINFO { }
我希望使用Compact Framework将其转换为Byte [],我尝试了以下内容而没有成功:
_NETINFO info = new _NETINFO();
byte[] buffer = (byte[])info;
它不起作用!我发现的唯一其他消息是使用CF中没有的BinaryFormatter!
还有其他任何消息吗?
答案 0 :(得分:0)
结构有多复杂?对于那些你没有指向其他东西的简单的东西,它很容易:
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();
}
还有一个使用不安全代码的版本更短,但这需要启用“允许不安全的代码”,并且由于某种原因会让一些人感到恐慌。
希望托管代码允许在没有副本的情况下执行此操作(或者反向 - 将字节数组转换为结构),但遗憾的是它没有。