我在一段教学代码中遇到了这个宏MAKEWORD(2,2)
。我在MSDN中读到它“通过连接指定的值来创建一个单词值”。
问题是,难道一个词不像一个无符号整数,为什么我需要做这样一个奇怪的过程,比如使用MAKEWORD()
发布于 2014-06-10 02:27:27
宏需要两个字节作为其参数:
WORD MAKEWORD(
BYTE bLow,
BYTE bHigh
);
它在Windef.h
中的定义为:
#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
它基本上是从两个1字节字构建一个16位字(而且看起来不是很可移植)。
具有一个字节(一个单词)的数字2的二进制表示形式是:x 0、0、0、0、2、0、0、0、0、0、2、0、0、0、0、0、2、0、0、0、0、0、0、0、0、0、0、1、1、1、1、1、1、1、1、1、0、1、0、1、0、0、0、0、0、0、0、0、0、0、0、0、0、2、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、4、2、1、2、1、2、1、2、1、2、1、0、2、0、0、0、0、0、0、0
如果我们像在MAKEWORD(2,2)
中那样将其中的两个字节连在一起,就会得到:
\x{e76f}\x{e76f}0\x{e76f}\x{e76f}0\x{e76f}\#**##.
为512 +2= 514:现场演示。
这个特定宏的唯一实际示例是在Winsock初始化中,以生成WSAStartup
所期望的版本控制单词。
https://stackoverflow.com/questions/24131843
复制相似问题