Reg 文件 - "dword"转换为什么?
Reg file - what does "dword" convert to?
我有一个我正在尝试读取的reg文件。
某些值中有一个类型"dword"...
"check"=dword:000001f4
"blah"=dword:000000c8
"test"=dword:00000000
"hello"=dword:00000000
我应该将其转换为哪种C++类型? 以及如何转换?
dword
是一个双字,其中一个字是旧的(Intel 8086)16位字。
因此,它转换为特定于 WinAPI 的类型 DWORD
,或标准 C(但尚未标准 C++)类型 uint32_t
。C++03 保证unsigned long
足够大以容纳 32 位值,但在 64 位平台上可能会浪费。在 MSVC++ 上,unsigned int
将足够大。
转换(如果您有十六进制字符串)可以使用 strtoul
完成。
如果您查看 RegQueryValueEx 的 MSDN 库文章并按照 lpType 参数的链接进行操作,您将到达此页面。 快速摘要:
- REG_BINARY:可变长度的字节数组
- REG_DWORD:32位数字
- REG_QWORD:64位数字
- REG_SZ : C 字符串
- REG_EXPAND_SZ:带有 %environment% 变量的 C 字符串
- REG_MULTI_SZ:C字符串数组
省略了奇怪的人。 只有一个好的候选者:REG_DWORD。 这是很常见的。
快速
的谷歌会告诉你,DWORD是两个单词,而WORD是Windows上的两个字节(从16位Windows的倒退,不要与硬件规范或其他操作系统中的"字"混淆,其中可能是32位或更多)。 因此,DWORD 是 32 位,就像您显示的十六进制值的宽度所暗示的那样。
无论如何,如果包含 Windows 头文件,则只需使用此处定义的DWORD
类型即可。
使用 <stdint.h>
中的uint32_t
。
可以使用strtoul()
然后转换完成解析(不要假设unsigned long
和uint32_t
相同)。
相关文章:
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 为什么g++在未执行的代码处标记强制转换错误
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 为什么我收到"从常量指针到指针的转换无效?
- 为什么 c++ 不允许(自动)强制转换?
- 为什么转换函数声明不需要至少一个定义类型说明符
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- 为什么转换不起作用
- 为什么转换涉及两个用户定义的转换功能/构造函数
- C++变体:为什么转换构造函数需要大小.(类型)为非零
- 为什么转换运算符在存在 const-ref 和值时会导致不明确的重载
- 为什么转换函数不适用于 std::string?
- 为什么转换为引用会干扰转换为布尔
- 为什么转换不适用于C++中的自定义运算符?
- 为什么转换变量函数参数很重要?