STREXPAND() と WSTRCOMPRESS() について
BREW API リファレンスの STREXPAND の説明を見てみると、
説明:
入力の文字が127より小さいか等しい場合、入力文字列をワイド文字に拡張します。2 倍幅になった文字(>127)が pDest にコピーされます。
って書いてあるんだけど、これ、正確には違う。
例えば、
AECHAR aechar[10]; char chars[10]; STREXPAND((byte*)"あガカあ", STRLEN("あガカあ"), aechar, 20); WSTRCOMPRESS(aechar, WSTRLEN(aechar), (byte*)chars, 10);
こんなプログラムを書いてみると、aechar の中身は、
82 a0 b6 00 de 00 b6 00 82 a0 00 00 あ カ ゙ カ あ
こんな風になってる。
半角文字は 127 より大きい値なんだけど、ワイド文字に拡張されてることが分かる。
多分、日本の STREXPAND だけはこうなってるんだろうな……。
で、その逆の操作を行う WSTRCOMPRESS をやって、chars の中身を見てみると、
82 a0 b6 de b6 82 a0 00 あ カ ゙ カ あ
ってなってるので、これもちゃんと半角カナが正常に処理されてるっぽいです。
手動で文字の長さや文字数を計測する際には注意ですね。
中国等にも対応させる場合は、この操作は必要無いだろうから、もっと注意。