将UInt64重新解释为结构

时间:2012-04-02 14:47:51

标签: c# marshalling unsafe-pointers

在我的代码中,我计算了一个UInt64值,然后像这样投射:

return *(Cell*)packedUInt64;

Cell是一个结构。 Marshal.SizeOf(new Cell())打印8,因此它应匹配UInt64,但上面的转换与AccessViolationException崩溃。我可能会尝试更安全的方法,例如Marshal.StructureToPtr,但我仍然想知道我的代码中的错误在哪里?可能是对齐不匹配问题?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你正在计算一个UInt64值(如何?),然后将其转换为指针。您实际上并没有将其转换为Cell结构,而是转换为此Cell所在的内存位置。在这种情况下,AccessViolationException似乎完全可以理解。

这是你真正想要做的,还是我误解了你的代码?