MAKEWORD用于什么?

use*_*920 5 c++ winapi

MAKEWORD(2,2)在一段教学代码中遇到了这个宏.我在MSDN中读到它" 通过连接指定的值创建一个WORD值. "

问题是,WORD不是无符号整数,为什么我需要做一个如此奇怪的程序,如使用MAKEWORD()

qua*_*dev 13

宏期望两个字节作为其参数:

WORD MAKEWORD(
  BYTE bLow,
  BYTE bHigh
);
Run Code Online (Sandbox Code Playgroud)

其定义Windef.h如下:

#define MAKEWORD(a,b)   ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
Run Code Online (Sandbox Code Playgroud)

它基本上从两个1字节字构建一个16位字(并且看起来不太便携)

带有1个字节(WORD)的数字2的二进制表示形式为:| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |

如果我们将这些字节中的两个连接起来MAKEWORD(2,2),我们得到:

| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |

这是512 + 2 = 514:现场演示.

这个特定宏的唯一真实例子是在Winsock初始化中,生成期望的版本控制字WSAStartup.