将UInt64重新解释为结构

本文关键字:解释 结构 UInt64 新解释 | 更新日期: 2023-09-27 18:29:41

在我的代码中,我计算一个UInt64值,然后像下面这样强制转换:

return *(Cell*)packedUInt64;

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

将UInt64重新解释为结构

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

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