давайте рассмотрим каждый бит путаницы в порядке
my $hex = 0xFA1F;
Здесь хранится шестнадцатеричная константа в $hex
, но в Perl нет шестнадцатеричного типа данных, поэтому, хотя вы можете записать шестнадцатеричные константы, а также двоичные и восьмеричные константы, Perl преобразует их все в десятичное число. Обратите внимание, что существует большая разница между
my $hex = 0xFA1F;
и
my $hex = '0xFA1F';
Первый хранит число в $ hex, которое при его распечатывании дает десятичное число, второе сохраняет строку, которая при распечатке даст 0xFAF1
, но может быть передана в функцию hex()
для преобразуется в десятичную.
$hex = hex($hex);
Шестнадцатеричная функция преобразует строку , как если бы это было шестнадцатеричное число, и возвращает десятичное значение, и, как и до этого момента, $hex
когда-либо использовалось только как число, Perl будет сначала преобразовать в строку $hex
затем передайте строку в функцию hex()
, чтобы преобразовать это значение из шестнадцатеричного в десятичное.
Итак, к решению. Вы почти там с printf()
, есть функция с именем sprintf()
, которая принимает те же параметры, что и printf()
, но вместо печати отформатированное значение возвращает его в виде строки. Так что вам нужно.
my $hex = 0xFA1F;
my $bin = sprintf("%b", $hex);
print $bin;
Техническое примечание:
Да, я знаю, что Perl хранит все свои числа как двоичные, но не пойдет туда для этого ответа, хорошо?