Не могли бы вы объяснить биты, которые я получаю при распаковке?

Я относительно неопытен в Perl, но мой вопрос касается функции распаковки при получении битов для числового значения. Например:

my $bits = unpack("b*", 1);
print $bits;

В результате будет напечатано 10001100, что равно 140 в десятичной системе. В обратном порядке это 49 в десятичной системе. Любые другие значения, которые я пробовал, похоже, дают неправильные биты.

Однако, когда я пропускаю $ bits через pack, он снова возвращает 1. Что-то мне здесь не хватает?

Похоже, я поспешил с выводами, когда решил, что моя проблема решена. Может быть, мне следует вкратце объяснить, что я пытаюсь сделать.

Мне нужно преобразовать целочисленное значение длиной до 24 бит (дело в том, что оно может быть больше одного байта) в битовую строку . Этого можно добиться с помощью распаковки и упаковки, как предлагает @ikegami, но мне также нужно найти способ преобразовать эту битовую строку обратно в исходное целое число (а не в его строковое представление).

Как я уже упоминал, я относительно неопытен с Perl, и я пытался без успех.


Я нашел то, что кажется оптимальным решением:

my $bits = sprintf("%032b", $num);
print "$bits\n";
my $orig = unpack("N", pack("B32", substr("0" x 32 . $bits, -32)));
print "$orig\n";
5
задан Peter Mortensen 31 May 2017 в 08:42
поделиться