##20110119 絶対をループにして終了を9に。
##20090818 メッセージ日本語化
##20040907 文字→コードを先、コード→文字を後に
##010515

$test=1;
while($test==1){

print "文字 <---> 文字コード 変換ツール [Cancel:Enter] \n";
##文字入力
print "◆文字入力◆\n";
print "日本語の文字(漢字・かな)を入力してください[ALT-半/全] : ";
$moji = <STDIN>;
chop($moji);

$aabk = unpack("n", $moji);
printf("hex(BigEndian) : %x\n",$aabk);
$aabk = unpack("v", $moji);
printf("hex(LittleEndian) : %x\n",$aabk);

print "半角英数字(ASCII文字)を入力してください : ";
$moji = <STDIN>;
chop($moji);

$aab = unpack("c", $moji);
printf("hex : %x\n",$aab);

##コード入力

##2bytes
print "◆コード入力◆\n";
print "2バイト文字の先頭バイトを16進数表\記で入力してください : ";
$code1 = <STDIN>;
chop($code1);

print "2バイト文字の後半バイトを16進数表\記で入力してください : ";
$code2 = <STDIN>;
chop($code2);
$kbaa = pack("cc", hex($code1), hex($code2));
print "hex ",$code1,$code2," -> ", $kbaa, "\n";

##1byte
print "1バイトのアスキーコードを16進数表記で入力してください : ";
$code = <STDIN>;
chop($code);

$baa = pack("c", hex($code));
print "hex $code -> ", $baa, "\n";

##文字化けテスト(2010年度追加)
print "\n\n";
print "繰り返し文字コードを調べる:1 \n";
print "文字化けテストを見る:2 \n";
print "終了:9 \n";
print "[ENTER]⇒";
$test = <STDIN>;

  if($test == 9){
    last;
  }
  elsif($test == 2){

    print "\nSHIFT-JISとASCIIの干渉による文字化け例(2バイト目が5cの文字):\n";
    print "噂のソフト...(「噂\のソ\フト」をそのまま表\示)\n";
    print "噂\のソ\フト...(「噂\」と「ソ\」の後に半角\\を入れて表\示)\n";
    last;

  }
  elsif($test == 1){
    next;
  }
  else{
  last;
  }

}

##(補足2) shift-JISとASCIIの干渉。*mojicode.plのコマンドプロンプト表示に注目！
##「表記」表=955c、記=8b4c、\=5c ...\はASCIIのエスケープ文字と解釈され、文字化け。(2バイト目が5cの文字は同様)
## 958b=赴、4c=L
##
##  ⇒「表」「記」「赴」「\」「L」のコードを各自確認してみよう。2バイト入力で「5c8b」「958b」を試してみるとよい。
##
##  ⇒文字化けする場合は、当該文字の後に\を置くとよい。
##    (文字化けテストを見る:1 を入力して終了するとサンプルが見られます。(元ファイルはメモ帳で開けます))


