如何在 Perl中将二进制字符串$x_bin="0001001100101"
转换为其数值?$x_num=613
Nathan Fellman
问问题
35213 次
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 回答