как распечатать результат из функции упаковки? - PullRequest
0 голосов
/ 09 июня 2018

Мне нравится проверять, что делает пакет.У меня есть следующий код, чтобы попробовать.

$bits = pack 'N','134744072';

как печатать биты?

Я сделал следующее:

printf ("bits = %032b \n", $bits);  

но это не работает.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Модуль Devel :: Peek (который поставляется с Perl) позволяет проверить представление переменной в Perl.Это, вероятно, более полезно, чем просто необработанный print, когда вы имеете дело с двоичными данными, а не с печатаемыми символьными строками.

#!/usr/bin/perl

use strict;
use warnings;

use Devel::Peek qw(Dump);

my $bits = pack 'N','134744072';

Dump($bits);

, который выдает такой результат:

SV = PV(0xaedb20) at 0xb15650
  REFCNT = 1
  FLAGS = (POK,pPOK)
  PV = 0xb06630 "\10\10\10\10"\0
  CUR = 4
  LEN = 10

«SV» в начале указывает, что это дамп «скалярного значения» (в отличие от массива или хеш-значения).

«SV = PV» указывает, что этот скаляр содержитстрока байтов (в отличие от целочисленного значения или значения с плавающей запятой).

'PV = 0xb06630' - указатель на то, где расположены эти байты.

"\ 10 \ 10\ 10 \ 10 "\ 0, вероятно, тот бит, который вас интересует. Строка в двойных кавычках представляет байты, составляющие содержимое этой строки.Внутри строки вы обычно видите, что байты интерпретируются так, как если бы они были ASCII, поэтому десятичный байт 65 будет выглядеть как «A».Все непечатаемые символы отображаются в восьмеричном виде с предшествующим \.

Таким образом, ваша переменная $bits содержит 4 байта, каждый восьмеричный '10' имеет шестнадцатеричное значение 0x08.

LENи CUR сообщают вам, что Perl выделил 10 байт памяти и в настоящее время использует 4 из них (поэтому length($bits) вернет 4).

0 голосов
/ 09 июня 2018

Если вы хотите двоичное представление числа, используйте

my $num = 134744072;
printf("bits = %032b\n", $num); 

Если вы хотите двоичное представление строки байтов, используйте

my $bytes = pack('N', 134744072);
printf("bits = %s\n", unpack('B*', $bytes)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...