对LOWORD, HIWORD, LOBYTE, HIBYTE的理解

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;
}


你可能感兴趣的:(对LOWORD, HIWORD, LOBYTE, HIBYTE的理解)