关于LOWORD, HIWORD, LOBYTE, HIBYTE

发布时间:2017年12月12日 作者:未知 查看次数:1059

自:http://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.

 copy

  1. #include <iostream>  

  2. #include <Windows.h>  

  3.   

  4. int main()  

  5. {  

  6.     // i = 10241035(0x009c440b)  

  7.     int i = 10241035;  

  8.     WORD ih = HIWORD(i);    // 取高16位  

  9.     WORD il = LOWORD(i);    // 取低16位  

  10.   

  11.     // result: 9c  

  12.     std::cout << std::hex << "i的高位: " << ih << std::endl;  

  13.     // result: 440b  

  14.     std::cout << std::hex << "i的低位: " << il << std::endl;  

  15.       

  16.     WORD bh = HIBYTE(i);    // 取高8位  

  17.     WORD bl = LOBYTE(i);    // 取低8位  

  18.     // result: 44(是44, 不是0, 以前一直理解错误)  

  19.     std::cout << std::hex << "i的高位: " << bh << std::endl;  

  20.     // result: b  

  21.     std::cout << std::hex << "i的低位: " << bl << std::endl;  

  22.   

  23.     return EXIT_SUCCESS;  

  24. }  






版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110