首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符解码转换函数的实现

字符解码转换函数的实现
EN

Stack Overflow用户
提问于 2009-11-17 20:17:46
回答 4查看 373关注 0票数 0

我需要在C++或C(最需要的)中实现一个字符编码转换函数,从自定义编码方案(以在单一编码中支持多语言)转换为UTF8。

我们的编码是相当随机的,它looks like this

由于此映射的随机性,我正在考虑在两个不同的映射中使用std::map将我们的编码映射为UTF,反之亦然,并使用此映射进行转换。他们是否有任何优化的数据结构或方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-17 20:24:05

如果您的代码点是连续的,只需创建一个大的char *数组并使用它进行转换。我真的不明白你所说的UTF-8码点是什么意思。UTF-8有表示法,Unicode有代码点。如果需要代码点,请使用整型数组。

代码语言:javascript
运行
复制
const int mycode_to_unicode [] = {
   0x00ff,
   0x0102,
   // etc.
 };

如果您的编码中有漏洞来捕获错误,您可以设置一个类似于-1的值。

另一种方法就是生成一个大小相同的结构数组,例如

代码语言:javascript
运行
复制
struct {
   int mycode;
   int unicode;
};

将数组的键复制到mycode中,将值复制到unicode中,并通过qsort运行它,使用一个比较unicode的值的函数,然后使用带有相同函数的bsearch从代码点转到您的编码。

这是假设您想要使用C。

票数 2
EN

Stack Overflow用户

发布于 2009-11-17 20:54:01

哈希表肯定是最快的解决方案。

如果一个表是预先知道的,并且永远不会改变(就像我所理解的那样),你可以为它确定一个perfect hash,这意味着你将不会有冲突和有保证的额外检索时间(以可能的一些空间为代价)。

我已经用过gperf几次了,但我建议你去看看Bob Jenkins关于哈希的伟大页面(还有minimal perfect hashing )

票数 2
EN

Stack Overflow用户

发布于 2009-11-17 20:33:23

当您预先构建常量映射并仅将其用于查找时,哈希表可能比std::map更理想。在C++标准中没有哈希表实现,但是有许多免费的实现,包括C和C++。

以下是C语言的实现:

http://www.cl.cam.ac.uk/~cwc22/hashtable/

http://wiki.portugal-a-programar.org/c:snippet:hash_table_c

Glibc hash tables

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1748473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档