【发布时间】:2017-02-08 08:44:13
【问题描述】:
我实现了这个函数来从 dword_ptr 转换为 dword,但是如果有其他方法可以减少代码,那将不胜感激。 此代码应与 32 位和 64 位窗口兼容 我见过this Question,但答案包含新建和删除操作
inline unsigned long Convert_to_DWORD(unsigned long long data)
{
//typedef unsigned __int64 ULONG_PTR
//typedef ULONG_PTR DWORD_PTR
//typedef unsigned long DWORD;
assert(UINT_MAX > data);
unsigned long* value = reinterpret_cast<unsigned long*>(&data);
return *value;
}
【问题讨论】:
-
你的代码绝对没有意义。只需将
(DWORD)data;用于您使用指针的内容?!在安全下是什么意思?将是 x64 中丢失的数据,这取决于data中的数据。 -
如果数据参数包含一个指向大数据的指针,如果它被强制转换,数据将会丢失,所以我必须检查数据是否小于 UNIT_MAX @RbMm
-
如果您有超过 32 位的数据,则不能将其转换为 32 位而不会丢失数据
-
在所有情况下
unsigned long* value = reinterpret_cast<unsigned long*>(&data);绝对无意义的代码。使用unsigned long value = (unsigned long)data; -
这个没有意义,函数返回一个long,但是需要long long作为输入,显然高位丢失了。