Perlでバイナリ文字列$x_bin="0001001100101"を数値に変換するにはどうすればよいですか?$x_num=613
35213 次
5 に答える
72
私の好みの方法は次のとおりです。
$x_num = oct("0b" . $x_bin);
からの引用man perlfunc:
oct EXPR
oct EXPRを8進文字列として解釈し、
対応する値。(EXPRがたまたま開始した場合
「0x」でオフにすると、16進文字列として解釈されます。もしも
EXPRは「0b」で始まり、次のように解釈されます。
バイナリ文字列。先頭の空白は無視されます
3つのケースすべて。)
于 2009-01-27T14:56:31.357 に答える
24
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
于 2009-01-27T14:46:50.313 に答える
12
いつものように、ここで言及されるべき優れたCPANモジュールもあります:Bit::Vector。
変換は次のようになります。
use Bit::Vector;
my $v = Bit::Vector->new_Bin( 32, '0001001100101' );
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";
バイナリ文字列はほぼすべての長さにすることができ、ビットシフトなどの他のきちんとしたことを行うことができます。
于 2009-01-27T16:23:31.540 に答える
7
実際には、先頭に「0b」を付けるだけで、2 進数として扱われます。
perl -le 'print 0b101'
5
しかし、これはベアワードに対してのみ機能します。
于 2009-01-28T00:28:10.593 に答える
0
メソッドを使用してeval()、裸の単語の制限を回避できます。
eval "\$num=0b$str;";
于 2018-01-30T20:56:09.287 に答える