C++ 位操作

标签 c++ unicode bit-shift

我正在尝试从 UTF-8 格式中提取字符值。假设我有两个字符,我从第一个字符中提取 5 位 => 10111,从另一个字符中提取 6 位 => 010000

所以

ch1 = 10111;
ch2 = 010000;

我如何将它们组合成 10111010000 并将其十六进制输出为 0x5d0?我需要转换还是有更简单的方法来执行此操作,因为检查文档 write 貌似可以顺序读取字符,有类似的功能吗?此外,由于 10111010000 的长度为 11 位,因此我似乎需要一个字符缓冲区。有谁知道该怎么做?

最佳答案

您需要使用移位,加上 ||= 运算符。

unsigned int ch3 = (ch1 << 6) | ch2;
// ch3 = 0000010111010000

我在这里假设 unsigned int 是 16 位。您的里程可能会有所不同。

关于C++ 位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6544912/

相关文章:

c++ - 为什么我的函数中的这个 for 循环只会运行一次,即使它应该运行多次?

c++ - 父进程的父进程 ID - Linux

r - 如何绘制 32 位 unicode 字符? R 3.2.2 在 Windows/RStudio 上挂起

mysql - Unicode 在 Java EE 6 Openshift MySQL 中显示不正确

java - JAVA读取unicode字符代码

c++ - 为什么没有在范围内声明字符串

c++ - 所有可能的位排列

c# - 为什么我会得到奇怪的结果位移负值?

javascript - 添加两个带移位的十六进制数字javascript

c++ - C++ 中的移位运算符