C コードの文字エンコーディングは、使用されるデータに依存しません。
C コードの文字セットは、使用される可能性のある文字列のエンコーディングとは無関係です。EBCDIC または UTF-8 の文字列を操作する C コードを ASCII で簡単に作成できます。
uint32_t
任意の文字に対して a で十分であると断言できますが、一度 UTF の世界に入ると、最大コード ポイントは '\U0010FFFF' ですが、複数のコード ポイントが文字を構成する場合があります。どの UTF にも多くの英数字があります。
コードが 0 ~ 9、AZ の 36 文字の英数字をランダム化するように制限されているとします。提案されているようにテーブル ルックアップを使用すると、ASCII、EBCDIC、UTF-8、UTF16-BE、UTF16-BE、UTF32-BE、UTF32-BE などのさまざまなエンコーディングの限られたケースで機能します。各テーブル エントリは、エンディアンに依存しない方法で明示的な値を使用する必要があります。次のようにリトルエンディアンを考えてみましょう。
typedef enum eEncoding {
eASCII,
eUTF16BE,
eUTF16LE,
...
eEncoding_N
};
unit8_t Table[eEncoding_N][36][5];
Table[eASCII][10 /* A */] = { 48, 0, 0, 0, 1 /* Length */ }
Table[eASCII][11 /* B */] = { 49, 0, 0, 0, 1 /* Length */ }
Table[eEBCIDIC][10] = {193, 0, 0, 0, 1 /* Length */ }
Table[eUTF16BE][10] = { 0,48, 0, 0, 2 /* Length */ }
Table[eUTF16LE][10] = { 48, 0, 0, 0, 2 /* Length */ }
...