`
isiqi
  • 浏览: 16028259 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    windows.h头文件

    WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。

    C++的文件 windows.h头文件

    C++的文件 windows.h头文件

    C语言常用头文件、位运算、SetConsoleTextAttribute()函数.docx

    头文件 stdio.h scanf、printf getchar、putchar gets、puts stdlib.h rand()%a+b:产生0~32767的随机数,a为范围,b为范围起始值,即产生b~b+a-1的随机数。 srand(随机种子):如srand(time(0))。 malloc(8)、...

    C语言头文件 NEW.H

    C语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 NEW.HC语言头文件 ...

    C语言头文件 GL.H C语言头文件 GL.H

    C语言头文件 GL.HC语言头文件 GL.HC语C语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言头文件 GL.HC语言...

    C语言头文件 MEMORY.H

    C语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY.HC语言头文件 MEMORY....

    C语言头文件 TYPEINFO.H

    C语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC语言头文件 TYPEINFO.HC...

    C语言头文件 WINDOWS

    C语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言头文件 WINDOWSC语言...

    C语言头文件 TNEF C语言头文件 TNEF

    C语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言头文件 TNEFC语言...

    C语言头文件 COMPLEX.H

    C语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件 COMPLEX.HC语言头文件...

    C语言头文件 WINDOWSX

    C语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 WINDOWSXC语言头文件 ...

    C语言头文件 LIMITS.H

    C语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS.HC语言头文件 LIMITS....

    C语言头文件 ISTREAM.H

    C语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件 ISTREAM.HC语言头文件...

    C语言头文件 IOSTREAM.H

    C语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC...

    windows头文件可以查找一些值

    windows头文件可以查找一些基础值 可用于c#中调用api时不知道api参数值方便查找

    C语言头文件 LIST.H

    C语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC...

    C语言头文件 IOMANIP.H

    C语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件 IOMANIP.HC语言头文件...

    C语言头文件 WINUSER.H

    C语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件 WINUSER.HC语言头文件...

    C语言头文件 FSTREAM.H

    C语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件 FSTREAM.HC语言头文件...

    windows 下 dirent 头文件

    windows 下 dirent 头文件

Global site tag (gtag.js) - Google Analytics