3-3 发表于 2017-12-27 08:52:42

对LOWORD, HIWORD, LOBYTE, HIBYTE的理解

LOWORD()得到一个32bit数的低16bit
HIWORD()得到一个32bit数的高16bit
LOBYTE()得到一个16bit数最低(最右边)那个字节
HIBYTE()得到一个16bit数最高(最左边)那个字节

LOWORD, HIWORD这个以前就很常用到, 比如消息参数 lParam 中存放着鼠标位置. lParam 是 4 字节的, 它的低两位存放 x、高两位存放 y.
需要注意的是:当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
        printf("i的高位: %x\n",ih);
    // result: 440b       
        printf("i的低位: %x\n",il);
      
    WORD bh = HIBYTE(i);    // 取高8位
    WORD bl = LOBYTE(i);    // 取低8位
    // result: 44(是44, 不是0, )
        printf("i的高位: %x\n",bh);
    // result: b
        printf("i的低位: %x\n",bl);

    return 1;
}
页: [1]
查看完整版本: 对LOWORD, HIWORD, LOBYTE, HIBYTE的理解