質問: VC++でプログラムをたまに書く程度の初心者です. 現在VC++で文字コードを指定して文字を描画したいと考えております. を参考に TextOutを使ってUTF-16で描画はできたのですが,SJISやJISで指定した文字を描画することができません. どのようなコードを書いたらよいのかご存知の方がいらっしゃいましたら,ご連絡いただけないでしょうか? また参考になりそうなサイトがありましたらあわせて教えていただきたいです. よろしくお願いいたします. p.s. TextOutAを使うとできそうな気がするのですが,具体的にどうやって記述したらよいのかがわかりません.
回答: シフトJIS文字列と言うのは、1バイトで表現できる英数字や2バイトで表現する漢字が混在した文字列で、基本単位は1バイト(charやunsigned char)で表されます。 int型で用意されたシフトJISコードをchar型の配列(文字列)に入れるには、上位8ビット分を配列の1バイト目に、下位8ビット分を配列の2バイト目に入れます。 例えば、次のような感じです。 ``` int code = 0x82A1; char mbs[3]; mbs[0] = (code & 0xff00) >> 8; // シフトJISの1バイト目 mbs[1] = (code & 0x00ff); // シフトJISの2バイト目 mbs[2] = 0x00; // 文字列の終端を表すnullコード TextOutA(hdc, 0, 0, mbs, lstrlen(mbs)); ``` シフトJISを1文字表示する場合は、シフトJISを格納する2バイト分と、文字列の終端を表すnullコードを入れるための合計3バイト分のchar配列を用意しておく必要があります。