如何合并两个 ASCII 字符?

How can I merge two ASCII characters?

我想合并两个字符并使用 ASCII 通过单个变量打印它们(参考下图):

[1]: https://i.stack.imgur.com/TWodP.jpg

根据我的评论,但根据 Jonathan 的意见进行了改进,我建议这样做:

int C;
C= (((unsigned char)a)<<8)|((unsigned char)b);

你已经尝试过评论版本是有帮助的,这个基本上是一样的,只是对 ab 的潜在负值(我认为超出范围,但 Jonathan 尽可能保持安全是对的。

至于说明:

<< 8 部分,即所谓的左移,将值向 MSB 移动 8 位。
IE。 00000000010000001 变成 01000000100000000.

为了避免出现负值(见下文为什么这很重要),该值首先被类型转换为 unsigned char。即((unsigned char)a)部分。请注意,在使用 () 时我倾向于大方一些,有些人不喜欢那样。这对两个值都完成了。

使用值 'A''B' 我们最终得到

01000001000000000000000001000010.

下一部分使用按位或 (|),而不是逻辑或 (||)。
结果是

0100000101000010,这就是我理解的你的目标。

防止负输入的重要性就在于此。任何负的 8 位值都设置了 MSB,当转换为更宽的数据类型时,将以所有 8 个新的高位设置结束。这是因为在 2-compliment 中用整数表示负值。

如 Jonathan 所解释的那样,最终转换为所需的更宽数据类型:

如果你有(unsigned char)A << 8作为一个术语,那么unsigned char值在移位发生之前被扩展为int,结果是一个int。

如果你的机器是小端,试试这个

unsigned int C = (b << 8) | a;
printf("%s",&C);

否则,如果您的机器是大端,请尝试

unsigned int C = (a << 24) | (b<<16);
printf("%s",&C);