我在此格式下 的两组编码(不相关:Unicode 和 GB18030 )之间有一个映射 Nx2:警告:巨大的 XML,如果连接速度慢,请不要打开:http: //source.icu-project.org/repos/ icu/data/trunk/charset/data/xml/gb-18030-2000.xml
快照:
<a u="00B7" b="A1 A4"/>
<a u="00B8" b="81 30 86 30"/>
<a u="00B9" b="81 30 86 31"/>
<a u="00BA" b="81 30 86 32"/>
我想将 b 值(右列)保存在数据结构中,并使用基于 a 值(左列)的索引直接访问它们(不搜索)。
例子:
我可以将这些元素存储在这样的数据结构中:
无符号短 *my_page[256] = {my_00,my_01, ....., my_ff}
,其中元素的定义如下:
静态无符号短 my_00[256] 等
. 所以基本上是一个矩阵 => 256x256 = 65536 个可用元素的矩阵。
对于具有较少元素和不同值的其他编码(例如中文 Big5、日文 Shift、韩文 KSC 等),我可以使用这样的双射函数访问元素:
element = my_page[(unicode[i]>>8)&0x00FF][unicode[i]&0x00FF];
,其中unicode[i] 填充了映射中的类似 a 的元素(如上所述)。我如何生成和填充 my_page 结构是类似的。对于工作编码,我需要存储大约 7000 个字符(并且它们存储在 my_page 中的唯一位置)。
问题来自 GB18030 编码,试图在 my_page 中存储 30861 个元素(65536 个元素)。我正在尝试使用相同的双射函数来填充(然后类似地访问)my_page 结构,但由于访问模式不返回唯一结果而失败。
例如:对于 unicode 值,由于i和i+1my_page[(unicode[i]>>8)&0x00FF][unicode[i]&0x00FF]
的索引可以相同,因此可以访问超过 1 个元素
。您是否知道另一种访问/填充 my_page 结构中的元素的方法,该方法仅基于我尝试做的预先计算的索引?
我假设我必须使用类似于伪散列函数的东西,它返回一系列值 VRange ,并且基于一组规则,我可以从范围 VRange 中提取 my_page[256][256] 的整数索引。
如果您有任何建议,请告诉我:)
谢谢 !