我在一段指令代码中遇到了这个宏MAKEWORD(2,2)
。我在MSDN中读到它“通过连接指定的值来创建WORD值”。
问题是,WORD是否不像无符号整数?为什么我需要做这样一个奇怪的过程,例如使用MAKEWORD()
?
最佳答案
宏期望两个字节作为其参数:
WORD MAKEWORD(
BYTE bLow,
BYTE bHigh
);
它在
Windef.h
中定义为:#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
它基本上是从两个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:live demo.
这个特定宏的唯一真实示例是Initialization of Winsock,用于生成
WSAStartup
期望的版本控制字。