Reg файл - что конвертирует "dword"? - PullRequest
1 голос
/ 03 апреля 2011

У меня есть reg-файл, который я пытаюсь прочитать.
В некоторых значениях есть тип " dword " ...

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

В какой тип C ++ я должен его преобразовать? и как?

Ответы [ 4 ]

7 голосов
/ 03 апреля 2011

A dword - это двойное слово, где словом является старое (Intel 8086) 16-разрядное слово.

Таким образом, оно преобразуется в специфичный для WinAPI тип DWORD или стандартныйC (но пока не стандартный C ++) тип uint32_t.C ++ 03 гарантирует, что unsigned long будет достаточно большим для хранения 32-битных значений, но может быть расточительным на 64-битных платформах.unsigned int будет достаточно большим на MSVC ++.

Преобразование (если у вас есть шестнадцатеричная строка) можно выполнить с помощью strtoul.

2 голосов
/ 03 апреля 2011

Если вы посмотрите статью MSDN Library на RegQueryValueEx и перейдете по ссылке для аргумента lpType, вы получите эту страницу . Краткое резюме:

  • REG_BINARY: массив байтов переменной длины
  • REG_DWORD: 32-разрядное число
  • REG_QWORD: 64-битное число
  • REG_SZ: строка C
  • REG_EXPAND_SZ: строка C с переменной% environment%
  • REG_MULTI_SZ: массив строк C

с опущенными причудливыми. Есть только один хороший кандидат: REG_DWORD. Это очень распространено.

1 голос
/ 03 апреля 2011

Быстрый Google скажет вам, что DWORD - это два слова, а WORD - это два байта в Windows (возврат от 16-битной Windows, не следует путать со словом в технических характеристиках оборудования или других ОС, где это может быть 32 бита или более). Таким образом, DWORD составляет 32 бита, как показывает ширина отображаемых вами шестнадцатеричных значений.

В любом случае, если вы включаете заголовочные файлы Windows, вы можете просто использовать определенный здесь тип DWORD.

0 голосов
/ 03 апреля 2011

Используйте uint32_t из <stdint.h>.

Синтаксический анализ может быть выполнен с использованием <a href="http://linux.die.net/man/3/strtoul" rel="nofollow">strtoul()</a> и последующим преобразованием (не предполагайте, что unsigned long и uint32_t одинаковы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...