2017年1月8日日曜日

mbedコンパイラでの半角カタカナの扱い

バグの出る半角カタカナのコード

半角カタカナというのは日本独特のもので、あまり使用が推奨されるものではありません。しかし組み込み界隈ではマイコンにLCDキャラクタディスプレイを接続するときに内部的にたびたび使用されます。
mbed のオンラインコンパイラで半角カタカナを使ったときにはまったので載せてせておきます。

int char c0='ア;'

というコードを書いたときにc0には0xB1が代入されます。では

int char s0[]="ア";

というコードでは同様にs0[0]に0xB1が代入されるのが道理ですが、実は

s0[0]: 0xEF
s0[1]: 0xBD
s0[2]: 0xB1

と入ります。もっと紛らわしいことに上記のコードをメモ帳で書いてからmbedコンパイラにコピペすると

s0[0]: 0xB1

となりますが、1回webサイトを閉じて開きなおすと上の3バイト代入され、上の例のようになります。

文字コード(Shift JIS と UTF-8)

2つの文字コードでの半角カタカナの扱いについて説明します。
Shfit JISは組み込み界隈に限らず昔から使われている文字コードです。
UTF-8で半角カタカナがどうマップされているかはここでわかります。
おまけ
C/C++のNULLは(int)0 としてdefineされているらしいです。つまり

int *p=NULL;
*p=0xff;

なんてコードを書くとハングアップします。

0 件のコメント:

コメントを投稿