首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MAKEWORD是用来干什么的?

MAKEWORD是用来干什么的?
EN

Stack Overflow用户
提问于 2014-06-10 02:14:20
回答 2查看 18.9K关注 0票数 8

我在一段教学代码中遇到了这个宏MAKEWORD(2,2)。我在MSDN中读到它“通过连接指定的值来创建一个单词值”。

问题是,难道一个词不像一个无符号整数,为什么我需要做这样一个奇怪的过程,比如使用MAKEWORD()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-10 02:27:27

宏需要两个字节作为其参数:

代码语言:javascript
运行
复制
WORD MAKEWORD(
  BYTE bLow,
  BYTE bHigh
);

它在Windef.h中的定义为:

代码语言:javascript
运行
复制
#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所期望的版本控制单词。

票数 20
EN

Stack Overflow用户

发布于 2014-06-10 02:29:19

粗略地说,MAKEWORD(x,y)等同于((y) << 8 | (x));当将两个字节大小的值打包到一个16位字段中时,这是非常有用的,就像通用消息结构中经常发生的那样。互补操作由LOBYTEHIBYTE宏执行,它们从WORD操作数中提取低阶或高阶字节。

在Windows的16位时代,宏得到了相当大的应用,但一旦32位程序占据主导地位,它的重要性就下降了。16位Windows的另一个痕迹是MSG结构成员wParamlParam的名称,它们最初分别键入WORDLONG;它们现在都是LONG

在查理斯·佩佐德的“Windows编程,第二版”一书中,可以找到一段曲折的历史洞察力。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24131843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档