dポイントプレゼントキャンペーン実施中!

Perlで16進数→10進数→二進数の変換を行うために
packとunpackを使用するのですが
32ビット以上の数であるためにbigintを使用しています。

そのときに
10進→二進変換
二進→10進変換などはどのように行えば良いのでしょうか?

32bitまでならば
sub bin_dec {
return (unpack("N",(pack("B32", $_[0]))));
}

sub dec_bin {
return (unpack("B32", pack("N", $_[0])));
}
のように行えるのですが

Nは32bitのlong型のままですので
4294967295以上の数は4294967295になってしまいます。

どうすれば良いのでしょうか?

Bit/Vectorモジュールは使えないものとします。

A 回答 (3件)

use bigint;


してれば
10進→二進変換
$i=4294967295+1;
print Math::BigInt::as_bin($i);
#結果:0b100000000000000000000000000000000
二進→10進変換
$b=0b100000000000000000000000000000001;
print $b;
#結果:4294967297
のようにそのままできます
    • good
    • 0
この回答へのお礼

できました~、ありがとうございます。

お礼日時:2005/12/07 10:50

二進→10進変換


$x = Math::BigInt->new('0b100000000000000000000000000000001');
でもいいですけど
    • good
    • 0

perlを使用されている環境が不明ですのでなんともいえませんが、


1.貴方の環境が64ビット整数をサポートするマシン(Cコンパイラ)で、かつperlが64ビット整数をサポートしている場合は、packのオプションで
q/Q(quad=64ビット整数)が使用可能です。
これが、使用できるならこれを使用すればできると思います。
2.もし使用できないなら、自前で
16進数→10進数→二進数の関数を作らざるを得ないと思います。
    • good
    • 0

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