38

Perlでバイナリ文字列$x_bin="0001001100101"を数値に変換するにはどうすればよいですか?$x_num=613

4

5 に答える 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 に答える