2010-11-21 19 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 2010-11-21 12:22:37

+2

最好使用專用的宏,比如'HIWORD','LOWORD','MAKELONG'等等。因爲不同的處理器使用不同的字節順序(小/大端等) – valdo 2010-11-21 13:02:20

+0

好吧,沒關係。我已閱讀關於按位運算符的文檔,並瞭解它現在的工作原理! – Midas 2010-11-21 13:09:55

3

WinAPI的提供這些類型的宏操作,如:

+1

另外你還有'HIBYTE'和'LOBYTE' – 2013-09-30 21:18:57