注册文件 - “dword”转换为什么?

时间:2011-04-03 14:11:14

标签: c++ windows types registry

我有一个我正在尝试阅读的reg文件 某些值中有一个“ dword ”类型......

"check"=dword:000001f4
"blah"=dword:000000c8
"test"=dword:00000000
"hello"=dword:00000000

我应该将C ++类型转换为什么?怎么样?

4 个答案:

答案 0 :(得分:7)

dword是双字,其中一个字是旧的(Intel 8086)16位字。

因此,它转换为WinAPI特定类型DWORD或标准C(但尚未标准C ++)类型uint32_t。 C ++ 03保证unsigned long足够大以容纳32位值,但在64位平台上可能会浪费。在MSVC ++上,unsigned int足够大。

转换(如果您有十六进制字符串)可以使用strtoul完成。

答案 1 :(得分:2)

如果您查看RegQueryValueEx的MSDN Library文章并关注lpType参数的链接,那么您将到达this page。快速摘要:

  • REG_BINARY:可变长度字节数组
  • REG_DWORD:32位数字
  • REG_QWORD:64位数字
  • REG_SZ:C string
  • REG_EXPAND_SZ:带有%environment%variable的C字符串
  • REG_MULTI_SZ:C字符串数组

省略了奇怪的。只有一个好的候选人:REG_DWORD。这很常见。

答案 2 :(得分:1)

一个快速的谷歌会告诉你一个DWORD是两个字,一个WORD是Windows上的两个字节(从16位Windows回归,不要与硬件规格或其他操作系统中的“字”混淆,其中它可能是32位或更多)。因此,DWORD是32位,就像您显示的十六进制值的宽度所示。

无论如何,如果你包含Windows头文件,你可以简单地使用那里定义的DWORD类型。

答案 3 :(得分:0)

使用uint32_t中的<stdint.h>

可以使用strtoul()进行解析然后转换(不要假设unsigned longuint32_t相同)。