全角文字から数値データへの変換 – プログラミング – Home

全角文字から数値データへの変換
 
通知
すべてクリア

[解決済] 全角文字から数値データへの変換


日曜日は晴れかな
 日曜日は晴れかな
(@日曜日は晴れかな)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

環境 VS2005 MFC
よろしくおねがいします
文字セット マルチバイト文字セット
全角文字の、◎●()○・■▲▼┣┃の一文字
を、文字コードまたは、一意に決まる数値データに変換する方法を、教えてもらえないで
しょうか。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

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);
}


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

動作確認していないよ。

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);
}
大体こんな感じでいいと思う。
動作確認してない。


返信引用
日曜日は晴れかな
 日曜日は晴れかな
(@日曜日は晴れかな)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

たいちろうさん、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);


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

違うよ
× 0x81 <= data[i] <= 0x9F
○ 0x81 <= data[i] && data[i] <= 0x9F

質問は一文字ってあったけど
回答は気分的な問題で複数文字対応にした。

1文字の場合はループいらないし
複数の文字を調べるならprintf(%d\n,code);はループの中に入れるべき。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました