c ++ - Reg fil - hvad konverterer 'dword' til?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en reg fil, som jeg forsøger at læse.

Der er en type ' dword ' i nogle af værdierne ...


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


Hvilken C ++ type skal jeg konvertere den til? og hvor ?

Bedste reference


A dword er et dobbeltord, hvor et ord er det gamle (Intel 8086) 16-bit ord.


Så konverterer den til den WinAPI-specifikke type DWORD eller standard C (men ikke endnu standard C ++) typen uint32\_t. En unsigned long er garanteret af C ++ 03 at være stor nok til at holde 32-bit værdier også, men kan være spildende på 64-bit platforme. En unsigned int vil være stor nok på MSVC ++.


Konvertering (hvis du har en hex streng) kan udføres med strtoul.

Andre referencer 1


Hvis du kontrollerer MSDN-bibliotekets artikel for RegQueryValueEx og følger linket til lpType-argumentet, kommer du til denne side. Et hurtigt resumé: [14]



  • REG\_BINARY: variabel længde række bytes

  • REG\_DWORD: et 32-bit nummer

  • REG\_QWORD: et 64-bit nummer

  • REG\_SZ: C-streng

  • REG\_EXPAND\_SZ: C-streng med\% miljø\% variabel

  • REG\_MULTI\_SZ: array af C-strenge



med bizarroerne udeladt. Der er kun én god kandidat: REG\_DWORD. Det er meget almindeligt.

Andre referencer 2


En hurtig Google vil fortælle dig, at en DWORD er to ord, og et WORD er to bytes på Windows (en tilbagesendelse fra 16-bit Windows, ikke forveksles med et 'ord' i hardware specifikationer eller andre OS'er, hvor det kan være 32 bit eller mere). Så en DWORD er 32 bits, ligesom bredden af ​​de hex-værdier du viser viser.


Anyway, hvis du inkluderer Windows header filer, kan du bare bruge den DWORD -type, der er defineret der.

Andre referencer 3


Brug uint32\_t fra <stdint.h>.


Parsering kan udføres ved hjælp af strtoul() og derefter konvertering (antager ikke, at unsigned long og uint32\_t er de samme).