一个旧的32位C ++应用程序(MS Visual Studio)具有如下代码行:
m_value = (PUCHAR)someDWORD;
PUCHAR是指向未签名字符的指针。
现在我已更改为64位,并且收到有关从DWORD转换为64位指针的(有效)警告。我对此的不合格解决方案是这样写:
m_value = (PUCHAR)(DWARD_PTR)someDWORD;
这是解决此警告(以及潜在的运行时错误)的正确方法吗?
答案 0 :(得分:3)
强制转换为DWORD_PTR
的野蛮人只会用零填充someDWORD
,不会恢复丢失的指针值的上半部分。
从一开始,您就需要someDWORD
成为DWORD_PTR
(或者实际上是std::uintptr_t
)。