Подтвердить что ты не робот

Как преобразовать двоичную строку в число в Perl?

Как преобразовать двоичную строку $x_bin="0001001100101" в ее числовое значение $x_num=613 в Perl?

4b9b3361

Ответ 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

Но это работает только для простого слова.