é 如何在 C++ 中按位移动到 E?

Posted

技术标签:

【中文标题】é 如何在 C++ 中按位移动到 E?【英文标题】:How is é bitwise shifted to a E in C++? 【发布时间】:2019-01-23 12:11:37 【问题描述】:

您好,我无法理解这一点,以及它如何采用像 é 这样的重音字符并将其转换为 E9。我可能会遗漏一些东西,我知道它向右移位 4。é = 11101000E = 01000101 移位 4 不会使E 正确吗?

static const char *digits = "0123456789ABCDEF";
unsigned char ch;
*dest++ = digits[(ch >> 4) & 0x0F];//this returns E
*dest++ = digits[ch & 0x0F];//this returns 9

【问题讨论】:

请解释一下,你想达到什么目的 二进制11101000左移4位是二进制1110,或十进制14。字符串digits恰好在索引14处有一个字符E 您似乎将 ascii 表示与十六进制值混淆了。 digits[('é'>>4)&0x0F] 只是digits 数组中的第 14 个值,即E。它与 "E" 的 ascii 表示无关。 @IgorTandetnik 谢谢 é = 11101000 请注意,这仅适用于您的特定字符编码。在 UTF-8 或任何其他 Unicode 编码中不是这样。 【参考方案1】:

该代码不会将 é 转换为 E9 - 它会将 8 位数字转换为其十六进制表示,以四位片段(“nybbles”)。

digits[(ch >> 4) & 0x0F]是代表高半字节的数字,digits[ch & 0x0F]是代表低半字节的数字。

如果您看到 é 变为 E9,那是因为 é 在您的字符编码中具有值 233。

【讨论】:

以上是关于é 如何在 C++ 中按位移动到 E?的主要内容,如果未能解决你的问题,请参考以下文章

C++中按位写入读取数值

C语言有效位

如何让我的表格在移动视图中按行折叠

如何在 VB.NET 中按位移位?

如何在 C++ 中使用犰狳在多维数组之间进行按位与?

在 Python 中按位与 0xFFFFFFFF