数値変換
■この章で解説する組み込み関数
hex, oct
■この章でできること
・16進数を10進数に変換する
・10進数を16進数に変換する
・8進数を10進数に変換する
・10進数を8進数に変換する

 16進数や8進数の文字列を10進数値に変換するには、hex、oct関数を使います。

#!/usr/bin/perl

#############################################
# 数値変換のサンプル
# Author: "Perl Programming Tips"
#############################################

$string1 = "ffff\n";
# 10進数表記
$string2 = "3333";
# 16進数表記
$string3 = "0x3333";
# 8進数表記
$string4 = "03333";
$string5 = "ffffffff";
$string6 = "0010\n";
# 不正文字列
$string7 = "kkkk\n";

# 16進数文字列を10進数値に変換
print "hex1:" . hex($string1) . "\n";
print "hex2:" . hex($string2) . "\n";
print "hex3:" . hex($string3) . "\n";
print "hex4:" . hex($string4) . "\n";
print "hex5:" . hex($string5) . "\n";
print "hex6:" . hex($string6) . "\n";
print "hex7:" . hex($string7) . "\n";

# 10進数値を16進数文字列に変換
$hexnum1 = hex($string1);
print "sprintf1:" . sprintf("%lx\n", $hexnum1);

# 8進数(または16進数)文字列を10進数値に変換
print "oct1:" . oct($string1) . "\n";
print "oct2:" . oct($string2) . "\n";
print "oct3:" . oct($string3) . "\n";
print "oct4:" . oct($string4) . "\n";
print "oct5:" . oct($string5) . "\n";
print "oct6:" . oct($string6) . "\n";
print "oct7:" . oct($string7) . "\n";

# 8進数値を16進数文字列に変換
$octnum1 = oct($string2);
print "sprintf2:" . sprintf("%lo\n", $octnum1);

 実行結果は次のようになります。

[g@630m pl]$ perl scalar03_01.pl
hex1:65535
hex2:13107
hex3:13107
hex4:13107
hex5:4294967295
hex6:16
hex7:0
sprintf1:ffff
oct1:0
oct2:1755
oct3:13107
oct4:1755
oct5:0
oct6:8
oct7:0
sprintf2:3333
[g@630m pl]$

 まず、16進数文字列を10進数値に変換するには、hex関数を使います。hex関数は、渡された文字列を16進数と解釈します。上のサンプルでhex2、hex3、hex4の結果が同じになっているので、どの表記であっても16進数と解釈されているのがわかります。また、解釈できない文字列を渡した場合は0が返されています。

 逆に、10進数値を16進数文字列に変換したい場合は、sprintf関数で"%lx"を指定して変換します。

hex
16進数文字列を10進数値に変換する。
書式
hex hexnum
引数
hexnum:
16進数文字列
戻り値
10進数値

 次に、8進数文字列を10進数値に変換するには、oct関数を使います。oct関数は、渡された文字列を8進数と解釈します。ただし、16進数表記で渡した場合は16進数と解釈されます。上のサンプルでoct2、oct3、oct4の結果を見ると、表記によって別の解釈がされているのがわかります。また、8進数として解釈できない文字列を渡した場合は0が返されています。

 逆に、10進数値を8進数文字列に変換したい場合は、sprintf関数で"%lo"を指定して変換します。

oct
8進数文字列を10進数値に変換する。ただし、0xで始まる文字列は16進数として解釈する。
書式
oct octnum
引数
octnum:
8進数文字列
戻り値
10進数値