在VC++中一个32位整数取高16位字节和低16位字节宏

发布时间:2016年11月12日 作者:未知 查看次数:1290

在VC++中一个32位整数取高16位字节和低16位字节宏。

1、LOWORD()和HIWORD()取高16位字节和低16位字节。

int nLow = LOWORD(lParam);

int nHig =  HIWORD(lParam);

2、利用MAKELONG()宏将两个16位数合并成32位数。

WORD nLow = 2;

WORD nHig = 1;

int nRet = MAKELONG(nLow,nHig);

则nRet=65538,即0x10002


注:

#define LOWORD(l)           ((WORD)((DWORD_PTR)(l) & 0xffff))

#define HIWORD(l)           ((WORD)((DWORD_PTR)(l) >> 16))

这是windef.h头文件中对宏LOWORD和HIWORD的定义。

作用分别是取出无符号长整型参数的高16位和低16位。LOWORD返回低16位,HIWORD返回高16位。

因为一个长整型占32位,其中高低16位的值可能有不同的意义,需要通过这2个宏分别取出来使用。取出来的结果是一个无符号短整型的值。

其原理正如定义那样,取低16位的宏LOWORD使用按位与操作符与数字0xffff运算,而数字0xffff是一个低16位全为1的数字,那么对其位与操作可以得到参数的低16位。

而取高16位的宏HIWORD则更简单,只需将参数右移16位,剩下的就是原高16位的值了。




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