w ndows加载文件,wndows头文件中提供的位运算宏及地址强转操作符的小节(BYTE,WORD,DWORD,MAKEWORD,LOWORD,LOBYTE.....)...

使用vc经常会碰到使用MAKEWORD,LOWORD,LOBYTE等的情况,那么分析一下吧!

一.类型解析符(BYTE,WORD,DWORD)

学过汇编应该知道,一个数据过来了,其到底代表什么,需要我们自己指定,我们可以指定其读取方式是字节,字,或双字,如下:

DWORD    dw = 0xffaabbcc;    //这是一个32位的值

DWORD    dw1 = WORD(dw);        //输出  0X0000bbcc

WORD    dw1 = WORD(dw);        //输出  0Xbbcc

DWORD    dw2 = BYTE(dw);        //输出    0x000000CC

BYTE    dw2 = BYTE(dw);        //输出    0xCC

DWORD    dw3 = DWORD(dw);    //输出    0xffaabbcc

二.实例解析

#define MAKEWORD(a, b)      ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))

#define MAKELONG(a, b)      ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))

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

#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))

#define LOBYTE(w)           ((BYTE)(((DWORD_PTR)(w)) & 0xff))

#define HIBYTE(w)           ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))

这是在windef.h中的一段定义,原封不动。

(注:x:代表原值)

1.

(DWORD_PTR)(a)                //把a当作双字读

(DWORD_PTR)(a)) & 0xff        //把a与0x000000ff与,即把前面的24位全部屏蔽掉了,去了最后的一个字节的内容

((BYTE)(((DWORD_PTR)(a)) & 0xff)    //作为字节来读,此时输出应该是:0x000000xx

(WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)        //作为字来读,此时同样: 0x000000xx

(((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8        //b在被砍成最后一个字节以后,又向左移了8位,成为: 0x0000xx00

((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))    //结果很清楚了,最后结果就是: 0x0000xxxx

例: WORD    wd = MAKEWORD(255,0);    //输出    0x00ff

总结:a,b被作为字节量对待,多余的都会被砍掉,即使a= 0x ffffaabb,最终,其作用的只是最后的bb。

2.

同上。

总结:a,b被作为字对待。

3.....

三:总结

其他很多类似的宏,RGB....都是一样的,关键是知道怎么去解析它...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值