如何将二进制字符串转换为Perl中的数字?

时间:2009-01-27 14:43:30

标签: perl binary

如何将二进制字符串$x_bin="0001001100101"转换为Perl中的数字值$x_num=613

5 个答案:

答案 0 :(得分:57)

我的首选方式是:

$x_num = oct("0b" . $x_bin);

引自man perlfunc

    oct EXPR
    oct     Interprets EXPR as an octal string and returns the
            corresponding value. (If EXPR happens to start
            off with "0x", interprets it as a hex string. If
            EXPR starts off with "0b", it is interpreted as a
            binary string. Leading whitespace is ignored in
            all three cases.)

答案 1 :(得分:24)

sub bin2dec {
    return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}

答案 2 :(得分: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";

二进制字符串可以是几乎任何长度,你可以做其他整洁的东西,如位移等。

答案 3 :(得分:6)

实际上你可以在前面粘贴'0b',它被视为二进制数字。

perl -le 'print 0b101'
5

但这仅适用于裸字。

答案 4 :(得分:0)

您可以使用eval()方法解决明字限制:

eval "\$num=0b$str;";