• ベストアンサー

hex関数について

print hex( 0x41 );        結果 101 ですが 0x41は 16進数41で  10進数の65ですね? なぜ101となるんでしょうか? 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

カテゴリーがPerlなんだから言語もPerlなんじゃ? でPerlだとして、hex関数の引数は文字列をとりますが 質問の例では整数を渡しています。 そこで、0x41を十進数に変換→65 それを文字列化→”65”→hexにわたされる →十六進文字列として解釈される →十進で出力 →101 となります。

startover
質問者

お礼

どうもありがとうございます! 流れを丁寧に教えていただき、 どうもありがとございます! 解りやすかったです!

その他の回答 (3)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

すみません。 下の回答の補足です。 もし、文字コードから16進数文字列を作成したい場合は # 文字列から16進数文字列を作成 my $msg = unpack("H2", "\x41"); # "\x41" は 'A' と同等 print "16進数文字コード: $msg\n"; こんな感じにするか以下のようにします。 # 数値を16進数文字列に変換する my $msg = sprintf("%x", 0x41); print "16進数文字コード: $msg\n"; # 上のコードだけならば # printf("16進数文字コード: %x\n", 0x41); # とすることができる print "数値: " . hex($msg);

startover
質問者

お礼

たびたび どうもです ちょうど 提示いただいたコードな感じのをみていた所ですが unpack packとかがむずかしくて.. サンプルも教えていただきありがとうございます!

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

Perlのhex関数は文字列で表現されている16進数(16進数文字列)を 数値に変換する関数です。 0x41というのは数値ですので print "0x41: " . 0x41 . "\n0x41 == 65: " . (0x41 == 65); とすれば分かるように、0x41 == 65です。 hex(0x41) は hex(65) と同等です。. Perlでは数値型と文字列型は状況に応じて自動で変換されるので この場合、hex関数に渡しているのは '65' という文字列と言うことに なります。

startover
質問者

お礼

どうもありがとうございます! hex関数に渡しているのは '65' という文字列と言うことに なります。 なるほど! どうもです!

  • mahaze
  • ベストアンサー率29% (217/731)
回答No.1

なんの言語かわかりませんが。。。 hex関数は16進数を返す関数なのではないですか? hex(16)としたらどういう結果になりますか? 10となれば10進の”16”を16進の”0x10”に変換したということになりますね。

startover
質問者

お礼

どうもありがとうございます!

関連するQ&A