次の形式で、2 つのエンコーディング セット (関連なし: Unicodeと GB18030 ) 間のマッピング Nx2 があります: icu/データ/トランク/文字セット/データ/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 値 (左列) に基づくインデックスを使用して (検索なしで) 直接アクセスしたいと考えています。
例:
これらの要素を次のようなデータ構造に格納できます。
unsigned short *my_page[256] = {my_00,my_01, ....., my_ff}
要素は次のように定義されます。
static unsigned short 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]
のインデックスが同じになる可能性があるため、複数の要素にアクセスできます
。私がやろうとしていたように、事前に計算されたインデックスのみに基づいて my_page 構造内の要素にアクセス/入力する別の方法を知っていますか?
値の範囲 VRangeを返す疑似ハッシュ関数のようなものを使用する必要があると仮定し、一連のルールに基づいて範囲 VRange から my_page[256][256] の整数インデックスを抽出できます。
何かアドバイスがあれば、教えてください:)
ありがとうございました !