如何在Perl中将二进制字符串$x_bin="0001001100101"
转换为其数值$x_num=613
?
我偏爱的方法是:
$x_num = oct("0b" . $x_bin);
引用自man perlfunc
:
oct EXPR oct将EXPR解释为八进制字符串并返回相应的值。(如果EXPR以“0x”开头,则将其解释为十六进制字符串。如果EXPR以“0b”开头,则将其解释为二进制字符串。在这三种情况下,前导空格都将被忽略。)
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
像往常一样,这里也应该提到一个优秀的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";
二进制字符串的长度几乎可以任意,而且您还可以执行其他有趣的操作,如位移等。
perl -le 'print 0b101'
5
您可以使用eval()
方法来解决裸字限制的问题:
eval "\$num=0b$str;";