環境 VS2005 MFC
よろしくおねがいします
文字セット マルチバイト文字セット
全角文字の、◎●()○・■▲▼┣┃の一文字
を、文字コードまたは、一意に決まる数値データに変換する方法を、教えてもらえないで
しょうか。
CString str = ◎●()○・■▲▼┣┃;
for (int i = 0; i * 2 < str.GetLength(); i++) {
CString c = str.Mid(i * 2, 2);
unsigned char c0 = c[0];
unsigned char c1 = c[1];
unsigned short code = (c0 << 8) | c1;
TRACE(%d : %s : %d(0x%x)\n, i, c, code, code);
}
動作確認していないよ。
char psz[] = ◎;
//符号なしじゃないと面倒なので
unsigned char * data = (unsigned char *)psz;
Shift JISは
int i = 0;
while{
int code = 0;
if( data[i] が 0 ) break;
if( data[i] が81~9FかE0~FC) {
code = (data[i] << 8) + data[i+1];
data[i+1]がShiftJISかどうかはチェックは省略している。
i+=2
} else {
code = data[i];
++i
}
printf(%d\n,code);
}
大体こんな感じでいいと思う。
動作確認してない。
たいちろうさん、wclrp ( 'o')さんありがとうございます。
char psz[] = ◎;
unsigned char * data = (unsigned char *)psz;
int i = 0;
int code = 0;
int len = sizeof(psz)/sizeof(char);
while (i < len) {
if( data[i] == 0 )
break;
if( 0x81 <= data[i] <= 0x9F || 0xE0 <= data[i] <= 0xFC)
{
//data[i+1]がShiftJISかどうかはチェックは省略している。
code = (data[i] << 8) + data[i+1];
i+=2;
} else {
code = data[i];
++i;
}
}
printf(%d\n,code);
違うよ
× 0x81 <= data[i] <= 0x9F
○ 0x81 <= data[i] && data[i] <= 0x9F
質問は一文字ってあったけど
回答は気分的な問題で複数文字対応にした。
1文字の場合はループいらないし
複数の文字を調べるならprintf(%d\n,code);はループの中に入れるべき。