é 如何在 C++ 中按位移动到 E?
Posted
技术标签:
【中文标题】é 如何在 C++ 中按位移动到 E?【英文标题】:How is é bitwise shifted to a E in C++? 【发布时间】:2019-01-23 12:11:37 【问题描述】:您好,我无法理解这一点,以及它如何采用像 é
这样的重音字符并将其转换为 E9
。我可能会遗漏一些东西,我知道它向右移位 4。é = 11101000
和 E = 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?的主要内容,如果未能解决你的问题,请参考以下文章