プロが教える店舗&オフィスのセキュリティ対策術

print hex( 0x41 );        結果 101

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

A 回答 (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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/17 16:21

カテゴリーがPerlなんだから言語もPerlなんじゃ?



でPerlだとして、hex関数の引数は文字列をとりますが
質問の例では整数を渡しています。
そこで、0x41を十進数に変換→65
それを文字列化→”65”→hexにわたされる
→十六進文字列として解釈される
→十進で出力
→101

となります。
    • good
    • 0
この回答へのお礼

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

解りやすかったです!

お礼日時:2008/07/17 16:15

Perlのhex関数は文字列で表現されている16進数(16進数文字列)を


数値に変換する関数です。
0x41というのは数値ですので

print "0x41: " . 0x41 . "\n0x41 == 65: " . (0x41 == 65);

とすれば分かるように、0x41 == 65です。

hex(0x41)

は hex(65) と同等です。.
Perlでは数値型と文字列型は状況に応じて自動で変換されるので
この場合、hex関数に渡しているのは '65' という文字列と言うことに
なります。
    • good
    • 0
この回答へのお礼

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

なるほど!
どうもです!

お礼日時:2008/07/17 16:12

なんの言語かわかりませんが。

。。

hex関数は16進数を返す関数なのではないですか?
hex(16)としたらどういう結果になりますか?
10となれば10進の”16”を16進の”0x10”に変換したということになりますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/17 16:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!