2010-10-22-01-文字コードの話 - 4 - project-enigma

2010-10-22-01-文字コードの話 - 4

>> Site top >> weblog >> 月別アーカイブ >> 2010年10月のlog >> 2010-10-22-01-文字コードの話 - 4

最終更新日付:2013/12/31 07:35:54


文字コードの話 - 4

2010 年 10 月 22 日

とりあえず、メインの話題は前回で終わってしまったので、今回から隅っこの面倒な話題を扱うとしよう。まずは文字列を指すポインタの型についてだ。

通常、C/C++ では文字は char 型であり、その連続するメモリ領域のどこかを指すポインタは char* 型だ。しかし、これらは ASCII 文字のみを使用する前提であり、そこから外に出れば不都合が生じる。Shift-JIS や Latin-1 であれば8ビット目も使うから unsigned char であることが望ましいし、Unicode ならば16ビット値のシーケンスだから short 型になる(unsignedだっけ?)。

そしてこれに関連する次の話題として、1つの文字(の値)を格納するデータ型は何であるべきかも問題だ。char* に対して char を対応させられるのは ASCII くらいで、Shift-JIS や EUC-JP などのバイト幅可変の世界では short 型以上のバイト幅が必要になるだろう。Unicode や ISO/IEC 10646 だったらばっちり4バイトが必要になる。

重要なのは、文字列(の先頭や途中のどこか)を指すポインタの型と、1つの文字(の値)を格納するデータ型は一致しないということだ。これは可変幅のエンコーディング全てに当てはまる。たとえばShift-JISならポインタは char* だが文字の値を格納するには 16ビットが必要だ。ポインタと文字値を無邪気に同じにできるのは、ASCII か UTF-32 くらいということになる。無論、こういった違いを扱うことも目的の1つだったわけだ。

で、これをどういうかたちでまとめたか。型の話はまだ続きそうだが、今日はひとまずここまでにしよう。1日に書ける量には限りがあるし、頑張り過ぎると持たない。ゆっくりと話を進めるとしよう。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : 開発

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.