10進数->16進数にsprintf("%04X",$x)、16進数->10進数にhex($x)
perlで基数変換するには、いくつか方法がありますが、私の場合、10進数->16進数にはsprintf("%04X",$dec_val)、16進数->10進数にはhex($hex_val)を使用しています。
#!c:/Perl/bin/perl use strict; use warnings; my $dec_val = 1999; #$dec_val = 0x07cf という書き方でもOK my $hex_val = sprintf("%04X",$dec_val); print "10進:$dec_val -> 16進:$hex_val (16進数 & 4桁 & 0前置)\n"; my $hex_val2 = "07cf"; my $dec_val2 = hex($hex_val2); print "16進:$hex_val2 (16進数 & 4桁 & 0前置) -> 10進:$dec_val2\n";
$ ./foo.pl 10進:1999 -> 16進:07CF (16進数 & 4桁 & 0前置) 16進:07cf (16進数 & 4桁 & 0前置) -> 10進:1999
※sprint()やhex()では前置きした文字列も問題なく変換できます
※10進->2進数にはsprintf("%b",$x)、10進->8進数にはsprintf("%o",$x)
pack(),unpack()もあるらしい
pack(),unpack()による基数変換もありますが、読みづらい気がするので、私は使用していません。
Math::BaseCalcもあるらしい
これまで使用したことはありませんが、更にMath::BaseCalcという基数変換を行うmoduleもあるようです。
http://search.cpan.org/perldoc?Math::BaseCalc
使い方も簡単のようですが、10<->16進数の基数変換程度であれば、sprintf("%04X",$x), hex($x)でいいかな。