Как преобразовать двоичную строку $x_bin="0001001100101"
в ее числовое значение $x_num=613
в Perl?
Как преобразовать двоичную строку в число в Perl?
Ответ 1
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
Ответ 2
Мой предпочтительный способ:
$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.)
Ответ 3
Как обычно, есть также отличный модуль 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";
Двоичные строки могут быть почти любой длины, и вы можете делать другие аккуратные вещи, такие как бит-сдвиг и т.д.
Ответ 4
На самом деле вы можете просто придерживать '0b' на передней панели и обрабатываться как двоичное число.
perl -le 'print 0b101'
5
Но это работает только для простого слова.