将 UTF-8 转换为 UTF-32,预先计算每个'chars'数
Converting UTF-8 to UTF-32, pre-calculating the number of 'chars' in each
我有一个工作算法将 UTF-8 字符串转换为 UTF-32 字符串,但是,我必须提前为我的 UTF-32 字符串分配所有空间。有没有办法知道 UTF-32 字符串将占用多少 UTF-8 字符。
例如,UTF-8 字符串"¥0"是 3 个字符,转换为 UTF-32 后是 2 个无符号整数。在进行转换之前,有没有办法知道我需要的 UTF-32"字符"数量?还是我将不得不重写算法?
有两个基本选项:
-
您可以通过 UTF-8 字符串进行两次传递,第一次计算您需要生成的 UTF-32 字符数,第二次实际将它们写入缓冲区。
-
分配您可能需要的最大 32 位字符数 - 即 UTF-8 字符串的长度。 这是浪费内存,但意味着您可以一次性转换 utf8->utf32。
您也可以使用混合 - 例如,如果字符串短于某个阈值,则使用第二种方法,否则使用第一种方法。
对于第一种方法,第一次遍历如下所示:
size_t len=0; // warning: untested code.
for(const char *p=src; *p; ++p) {
// characters that begin with binary 10xxxxxx... are continuations; all other
// characters should begin a new utf32 char (assuming valid utf8 input)
if ((*p & 0xc0) != 0x80) ++len;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 将 UTF-8 转换为 UTF-32,预先计算每个'chars'数
- 接收一串"chars",并尝试使用指针计算其中有多少个相同类型