头文件minwindef.h
包含以下宏:
#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))
很明显他做了什么:他从两个字节收集 - 两个字节。
我的问题是:为什么要采取这么多行动?为什么在第一部分中首先转换为DWORD_PTR
然后按位执行И
,在第二部分中它是相似的:只WORD
需要转换为和移位。
如果我而不是这样的宏写这个:
BYTE a = 0x60;
BYTE b = 0x20;
WORD word = ((WORD)a | ((WORD)b) << 8);
这是正确的吗?
宏对类型一无所知。因此,他们被迫考虑各种可能的选择。要了解什么和如何 - 让我们比较您的宏和标准宏:
让我们尝试不同的选择...
这使我得出结论
如您所见,仅投射到
WORD
显然是不够的......