Reg 文件 - "dword"转换为什么?

Reg file - what does "dword" convert to?

本文关键字:为什么 转换 dword Reg 文件      更新时间:2023-10-16

我有一个我正在尝试读取的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 longuint32_t相同)。