2010-11-21 4 views

ответ

2

В Win32 a DWORD - это 32-разрядное целое число без знака. В других контекстах это могло бы означать что-то еще.

Assuminng определение Win32 (и другие 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 будет иметь значение 0x44332211.

Аналогично:

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

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

dword_from_words будет иметь значение 0x22221111.

Чтобы извлечь сказать, третьи байты из dword_from_bytes например:

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

хотя & 0xff не является строго необходимым в этом случае данного типа next_msb, но если тип приемника был больше, чем 8 бит , он будет маскировать бит msb.

+0

Теперь он начинает иметь смысл. Но что на самом деле означает '<<', '>>' и '|'? Благодаря! – Midas

+2

Лучше использовать выделенные макросы, такие как 'HIWORD',' LOWORD', 'MAKELONG' и т. Д. Поскольку разные процессоры используют разные байтовые заказы (маленькие/большие эндианты и т. Д.) – valdo

+0

Ну, неважно. Я прочитал документы о побитовых операторах, и я понимаю, как это работает сейчас! – Midas

3

WinAPI предоставляет макросы для манипуляции этих типов, таких как:

+1

Кроме того, у вас есть 'HIBYTE' и' LOBYTE' соответственно –

Смежные вопросы