こんにちは。 サンプルプログラムのスクリプトプレイヤーを参考にしてクイズゲームを作ろうとしているのですが、 サンプルのやり方だと半角文字を奇数回表示したあとで 全角文字を表示しようとすると文字化けしてしまいます。 タブ文字を設定して、行の途中で改行したり特定の部分だけ文字の色を変えたりしたいので、 1文字ずつ表示できるようにはしたいです。 判定中の文字が半角文字なのか全角文字の1バイト目なのか判別できればよいと思うのですが、 どうすれば実現できるのか教えていただければ嬉しいです。
Shift-JISの場合、先頭ビットが0の場合は1バイト文字を、1の場合は2バイト文字を表します。 つまり文字列を1バイトずつ読んでいき、先頭ビットが1のデータが表れたら、次のバイトとセットで取り出すことで解決できます。 for(i=0;i<strlen(s);i++){ if(s[i] & 0x80){ // 2バイト文字の時の処理 i++; }else{ // 1バイト文字の時の処理 } }
ありがとうございます! Shift-JISを使うというのは、DXライブラリの使い方のVC++の方では 「マルチバイト文字セットを使用する」を設定すればShift-JISが使われるということでいいですか?
そういうことになります。 Shift_JisはWindowsが現在標準で使用している日本語文字セットです。