2011-04-03 140 views
1

我有一个我正在尝试阅读的reg文件。
有一种类型的“DWORD”在一些值...Reg文件 - “dword”转换为什么?

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

我应该把它转换成什么C++类型?如何 ?

回答

7

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

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

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

0

使用uint32_t<stdint.h>

解析可以使用strtoul()完成,然后转换(不要假设unsigned longuint32_t是相同的)。

1

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

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

+0

一个字在32位体系结构上是32位,所以这里有一点困惑。 – falstro 2011-04-03 14:17:13

+1

在Windows上下文中不正确:http://msdn.microsoft.com/en-us/library/aa383751%28v=vs.85%29.aspx - Windows始终将WORD定义为16位,因为它始于16位Windows。我会更新我的答案,以澄清我在谈论Windows的WORD,而不是小写的“单词”(您是正确的)在非Windows环境中可能更大。 – 2011-04-03 14:21:59

2

如果您查看MSDN Library的RegQueryValueEx文章并查看lpType参数的链接,那么您将到达this page。简要总结:

  • REG_BINARY:一个32位的数字
  • REG_QWORD:一个64位的数
  • REG_SZ:C字符串
  • REG_EXPAND_SZ:字节
  • REG_DWORD的可变长度列C字符串%环境%变量
  • REG_MULTI_SZ:C字符串数组

与bizarro一起被省略。只有一个好的候选人:REG_DWORD。这很常见。

相关问题