MAKEWORD,LOWORD,LOBYTE

编程入门 行业动态 更新时间:2024-10-19 00:30:39

<a href=https://www.elefans.com/category/jswz/34/728160.html style=MAKEWORD,LOWORD,LOBYTE"/>

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....都是一样的,关键是知道怎么去解析它...

更多推荐

MAKEWORD,LOWORD,LOBYTE

本文发布于:2024-03-10 13:33:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728111.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MAKEWORD   LOWORD   LOBYTE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!