いつもお世話になります。
以下コードを記入すると標記の通り漢字コードがあわないのと、何で動くかが解決できないです。
#include <stdio.h>
//キー入力を行う
//漢字の場合は2バイトにして返す
//上位バイトが0ならASCIIコード
//半角2バイト文字には非対応
int getevent()
{
int c,c2;
if ((c = getchar()) > 0x7f)
{
printf( "漢字だよ\n");
c2 = getchar();
printf( "c=%x\n",c);
printf( "c2=%x\n",c2);
return (c << 8) | c2;
}
else
{
printf( "Asciiだよ\n");
return c;
}
}
int main()
{
int e ;
//イベントの検出と配送
while ((e = getevent()) != EOF)
printf( "e=%x\n",e);
}
実行結果⇓
$./a.out
亜
漢字だよ
c=e4
c2=ba
e=e4ba<−−−−−ここまでは納得<−−−−−でもコードがあわない
漢字だよ<−−−−−何で動く?
c=9c<−−−−−何で動く?<−−−−−この数値は何
c2=a<−−−−−何で動く?この数値は何(改行)
e=9c0a<−−−−−何で動く?
EUC コード表を確認すると
http://charset.7jp.net/euc.html
亜→b0a1
全然一致しないです。asciiも一致しない
ただし1バイトのEUCはあっている
疑問点をまとめると2点
何で動く?の部分と
なんでコードが一致しない?
御教授よろしくお願いします。
漢字コードがあわない。何で動く?
Re: 漢字コードがあわない。何で動く?
ソースコードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
UTF-8だと「亜」はE4BA9Cなので、一致しています。
(参考:あの文字のバイト列は何になるんだっけ 各文字コードの16進数表記を求める(PHP/JavaScript/Perl/Ruby/Python) - INASOFT 管理人のふたこと)
処理系が正しく作られているから…でしょうか?
別の文字コードだからでしょう。えいえい2 さんが書きました:なんでコードが一致しない?
UTF-8だと「亜」はE4BA9Cなので、一致しています。
(参考:あの文字のバイト列は何になるんだっけ 各文字コードの16進数表記を求める(PHP/JavaScript/Perl/Ruby/Python) - INASOFT 管理人のふたこと)
難しい質問ですね。えいえい2 さんが書きました:何で動く?
処理系が正しく作られているから…でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 漢字コードがあわない。何で動く?
ありがとうございます。
UTF-8 というものがあったなんて知らなかったです。
あと最後に「0a 」となってますが、改行の意味または文字の終わりを指しているのでしょうか?
UTF-8 というものがあったなんて知らなかったです。
あと最後に「0a 」となってますが、改行の意味または文字の終わりを指しているのでしょうか?
Re: 漢字コードがあわない。何で動く?
0x0A = LF (ASCII) = line feed(改行)ですね。えいえい さんが書きました:あと最後に「0a 」となってますが、改行の意味または文字の終わりを指しているのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)