【发布时间】:2010-10-03 18:37:28
【问题描述】:
如何在 Perl 中将二进制字符串 $x_bin="0001001100101" 转换为其数值 $x_num=613?
【问题讨论】:
如何在 Perl 中将二进制字符串 $x_bin="0001001100101" 转换为其数值 $x_num=613?
【问题讨论】:
我的首选方式是:
$x_num = oct("0b" . $x_bin);
引用man perlfunc:
【讨论】:
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";
二进制字符串几乎可以是任意长度,您还可以执行其他简洁的操作,例如位移等。
【讨论】:
其实你可以把'0b'贴在前面,它被当作二进制数处理。
perl -le 'print 0b101'
5
但这仅适用于裸词。
【讨论】:
您可以使用eval() 方法来解决裸字限制:
eval "\$num=0b$str;";
【讨论】: