對LOWORD, HIWORD, LOBYTE, HIBYTE的理解

原文版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/huang_xw/article/details/8738610
LOWORD()得到一個32bit數的低16bit  
HIWORD()得到一個32bit數的高16bit
LOBYTE()得到一個16bit數最低(最右邊)那個字節
HIBYTE()得到一個16bit數最高(最左邊)那個字節

LOWORD, HIWORD這個以前就很常用到, 比如消息參數 lParam 中存放着鼠標位置. lParam 是 4 字節的, 它的低兩位存放 x、高兩位存放 y. 但是, 我對LOBYTE, HIBYTE的理解一直不對. 
當LOBYTE, HIBYTE應用於32bit數時, 實際上這時應該用於32bit數的後16bit.
 

#include <iostream>
#include <Windows.h>
 
int main()
{
	// i = 10241035(0x009c440b)
	int i = 10241035;
	WORD ih = HIWORD(i);	// 取高16位
	WORD il = LOWORD(i);	// 取低16位
 
	// result: 9c
	std::cout << std::hex << "i的高位: " << ih << std::endl;
	// result: 440b
	std::cout << std::hex << "i的低位: " << il << std::endl;
	
	WORD bh = HIBYTE(i);	// 取高8位
	WORD bl = LOBYTE(i);	// 取低8位
	// result: 44(是44, 不是0, 以前一直理解錯誤)
	std::cout << std::hex << "i的高位: " << bh << std::endl;
	// result: b
	std::cout << std::hex << "i的低位: " << bl << std::endl;
 
	return EXIT_SUCCESS;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章