38

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

4

5 回答 5

72

我的首选方式是:

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

引自man perlfunc

    十月 EXPR
    oct 将 EXPR 解释为八进制字符串并返回
            对应的值。(如果 EXPR 恰好启动
            用“0x”关闭,将其解释为十六进制字符串。如果
            EXPR 以“0b”开头,它被解释为
            二进制字符串。前导空格被忽略
            所有三种情况。)
于 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',它被视为二进制数。

perl -le 'print 0b101'
5

但这仅适用于裸词。

于 2009-01-28T00:28:10.593 回答
0

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

eval "\$num=0b$str;";
于 2018-01-30T20:56:09.287 回答