【发布时间】:2012-04-02 14:47:50
【问题描述】:
在我的代码中,我正在计算一个 UInt64 值,然后像这样进行转换:
return *(Cell*)packedUInt64;
Cell 是一个结构体。 Marshal.SizeOf(new Cell()) 打印 8,因此它应该匹配 UInt64,但上面的转换会因 AccessViolationException 而崩溃。我可能可以尝试更安全的方法,例如 Marshal.StructureToPtr,但我仍然想知道我的代码中的错误在哪里?可能是对齐不匹配问题?
【问题讨论】:
-
我回避 Marshal.StructureToPtr 的一个原因是它有点慢。
-
StructureToPtr正是您需要使用的,考虑到您甚至询问如何避免使用它。
标签: c# marshalling unsafe-pointers