【问题标题】:Reinterpreting UInt64 as structure将 UInt64 重新解释为结构
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2016-12-28
    • 2018-11-07
    • 2022-01-15
    相关资源
    最近更新 更多