Как мне преобразовать двоичную строку в число в Perl? - PullRequest
29 голосов
/ 27 января 2009

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

Ответы [ 5 ]

57 голосов
/ 27 января 2009

Мой предпочтительный способ:

$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.)
24 голосов
/ 27 января 2009
sub bin2dec {
    return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
12 голосов
/ 27 января 2009

Как обычно, здесь также есть отличный модуль CPAN: Бит :: Вектор .

Преобразование будет выглядеть примерно так:

use Bit::Vector;

my $v = Bit::Vector->new_Bin( 32, '0001001100101' );
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";

Бинарные строки могут быть практически любой длины, и вы можете делать другие полезные вещи, такие как сдвиг битов и т. Д.

6 голосов
/ 28 января 2009

На самом деле вы можете просто вставить '0b' на передней панели, и это будет рассматриваться как двоичное число.

perl -le 'print 0b101'
5

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

0 голосов
/ 30 января 2018

Вы можете использовать метод eval(), чтобы обойти ограничение голого слова:

eval "\$num=0b$str;";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...