我有一个我正在尝试阅读的reg文件。
有一种类型的“DWORD”在一些值...Reg文件 - “dword”转换为什么?
"check"=dword:000001f4
"blah"=dword:000000c8
"test"=dword:00000000
"hello"=dword:00000000
我应该把它转换成什么C++类型?如何 ?
我有一个我正在尝试阅读的reg文件。
有一种类型的“DWORD”在一些值...Reg文件 - “dword”转换为什么?
"check"=dword:000001f4
"blah"=dword:000000c8
"test"=dword:00000000
"hello"=dword:00000000
我应该把它转换成什么C++类型?如何 ?
A dword
是一个双字,其中一个字是旧的(Intel 8086)16位字。
因此,它将转换为WinAPI特定类型DWORD
或标准C(但尚未标准C++)类型uint32_t
。一个unsigned long
由C++ 03保证足够大以保存32位值,但在64位平台上可能会浪费。一个unsigned int
将在MSVC++上足够大。
可以使用strtoul
来完成转换(如果你有一个十六进制字符串)。
使用uint32_t
从<stdint.h>
。
解析可以使用strtoul()
完成,然后转换(不要假设unsigned long
和uint32_t
是相同的)。
快速谷歌会告诉你,一个DWORD是两个单词,一个WORD是Windows上的两个字节(从16位Windows倒退,不要与硬件规格或其他操作系统中的“单词”混淆,它可能是32位或更多)。所以DWORD是32位,就像你所显示的十六进制值的宽度一样。
无论如何,如果你包含Windows头文件,你可以简单地使用在那里定义的DWORD
类型。
如果您查看MSDN Library的RegQueryValueEx文章并查看lpType参数的链接,那么您将到达this page。简要总结:
与bizarro一起被省略。只有一个好的候选人:REG_DWORD。这很常见。
一个字在32位体系结构上是32位,所以这里有一点困惑。 – falstro 2011-04-03 14:17:13
在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