2010-11-21 15 views

Antwort

2

In Win32 ist eine DWORD eine 32-Bit-Ganzzahl ohne Vorzeichen. In anderen Zusammenhängen könnte es möglicherweise etwas anderes bedeuten.

die Win32-Definition Assuminng (und andere 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 wird 0x44332211 den Wert haben.

Ähnlich:

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

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

dword_from_words den Wert 0x22221111 haben.

das dritte Byte von dword_from_bytes zum Beispiel sagen zu extrahieren:

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

obwohl die & 0xff in diesem Fall nicht unbedingt erforderlich ist, die Art der next_msb gegeben, aber wenn der Typ des Empfängers war größer als 8 Bit Es wird die MSB-Bits ausblenden.

+0

Nun beginnt es Sinn zu machen. Aber was bedeuten die '<<', '>>' und '|' eigentlich? Vielen Dank! – Midas

+2

Es ist besser, die dedizierten Makros wie 'HIWORD',' LOWORD', 'MAKELONG' usw. zu verwenden. Da verschiedene Prozessoren verschiedene Byte-Reihenfolgen verwenden (Little/Big Endian usw.) – valdo

+0

Nun, macht nichts. Ich habe die Dokumentation über bitweise Operatoren gelesen und verstehe, wie es jetzt funktioniert! – Midas

3

WinAPI bietet Makros für die Manipulationen dieser Art, wie zum Beispiel:

+1

zusätzlich haben Sie die 'HIBYTE' bzw.' LOBYTE' –