Конвертируйте Hex в Binary и продолжайте вести 0 - PullRequest
0 голосов
/ 05 июня 2018

У меня есть массив шестнадцатеричных чисел, которые я хотел бы преобразовать в двоичные числа, проблема в том, что в моем коде удаляются первые 0 для таких вещей, как 0,1,2,3.Мне нужно, чтобы эти ведущие нули обрабатывались в следующем разделе моего кода.Есть ли простой способ конвертировать Hex в Binary и сохранить мои ведущие 0 в perl?

use strict;
use warnings;
my @binary;
my @hex = ('ABCD', '0132', '2211');
foreach my $h(@hex){
my $bin = sprintf( "%b", hex($h));
push @binary, $bin;
}

foreach (@binary){
print "$_\n";
}

выполнение кода дает мне 1010101111001101 100110010 10001000010001

Редактировать: Найти аналогичный ответ, используя pack ираспаковать, заменить

sprint( "%b", hex($h)); на unpack( 'B*', pack('H*' ($h))

Ответы [ 2 ]

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

Это решение использует длину шестнадцатеричного представления для определения длины двоичного представления:

for my $num_hex (@nums_hex) {
   my $num = hex($num_hex);
   my $num_bin = sprintf('%0*b', length($num_hex)*4, $num);
   ...
}
0 голосов
/ 05 июня 2018

Вы можете указать ширину вывода в sprintf или printf, поместив число между символом% и символом форматирования следующим образом.

printf "%16b\n",hex("0132");

и добавив перед цифрой 0,сделать так, чтобы результат заполнялся нулями, как это

printf "%016b\n",hex("0132");

последний дает результат

0000000100110010

Но все это рассматривается вдокументация для этих функций.

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