数値変換
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進数値