2010-11-21 7 views

Répondre

2

Dans Win32, un DWORD est un entier non signé de 32 bits. Dans d'autres contextes, cela pourrait éventuellement signifier autre chose.

Assuminng la définition Win32 (et d'autres typedefs Win32):

BYTE lsb = 0x11 : 
BYTE next_lsb = 0x22 : 
BYTE next_msb = 0x33 : 
BYTE msb = 0x44 : 

DWORD dword_from_bytes = (msb << 24) | (next_msb << 16) | (next_lsb << 8) | lsb ; 

dword_from_bytes aura la valeur 0x44332211.

De même:

WORD lsw = 0x1111 : 
WORD msw = 0x2222 : 

DWORD dword_from_words = (msw << 16) | lsw ; 

dword_from_words aura la valeur 0x22221111.

Pour extraire dire le troisième octet de dword_from_bytes par exemple:

next_msb = (dword_from_bytes >> 16) & 0xff ; 

bien que le & 0xff est pas strictement nécessaire dans ce cas, étant donné le type de next_msb, mais si le type du récepteur était supérieur à 8 bits , il va masquer les bits msb.

+0

Maintenant, il commence à avoir un sens. Mais que signifient réellement les '<<', '>>' et '|'? Merci! – Midas

+2

Il est préférable d'utiliser les macros dédiées, telles que "HIWORD", "LOWORD", "MAKELONG" et etc. Parce que les processeurs différents utilisent des ordres de byte différents (petit/grand endian et etc.) – valdo

+0

Eh bien, tant pis. J'ai lu les docs sur les opérateurs bit à bit et je comprends comment cela fonctionne maintenant! – Midas

3

WinAPI fournit des macros pour les manipulations de ces types, tels que:

+1

en outre vous avez les 'HIBYTE' et' LOBYTE' respectivement –