Как мне преобразовать десятичное в шестнадцатеричное в Perl?

Как я могу конвертировать число,$d = 1024в десятичном виде до 0xFF в шестнадцатеричном в Perl?

d Переменная должна быть присвоена другой переменной и напечатана, поэтому для удобства чтения я должен был иметь ее в шестнадцатеричном формате.

 user273190330 авг. 2013 г., 08:59
Только один маленький намек: 1024 в гексе - это 0x200, а 0xFF - 255 в десятичном виде.
 Peter Mortensen08 мар. 2016 г., 01:32
Для обратного, от шестнадцатеричного до десятичного, см. Вопрос переполнения стекаHow can I convert hex strings into numbers in Perl?.
 tinmarino09 дек. 2018 г., 22:26
1024 = 4 * 256 = 0x400:perl -Mbigint -E 'say 1024->as_hex' печатает 0x400

Ответы на вопрос(4)

Предостережение:sprintf overflows в 264 & # X2245; 1019на 32-битном даже уже на 232 & # X2245; 4 & # xD7; 109.

Для больших чисел включите лексическую прагмуbigint. as_hex задокументировано вMath::BigInt.

use bigint;
my $n = 2**65;
print $n->as_hex;   # '0x20000000000000000'
Решение Вопроса

1024 в десятичной дроби нет0xFF в шестнадцатеричном виде Вместо этого это0x400.

Ты можешь использоватьSprintf как:

my $hex = sprintf("0x%X", $d);
 02 сент. 2018 г., 22:40
Нет более быстрого способа сделать это (для одного лайнера)?
I put these snippets into Perl files in my $PATH: Convert list of decimal numbers into hexadecimal and binary
for ($i = 0; $i < @ARGV; $i++) {
    printf("%d\t= 0x%x\t= 0b%b\n", $ARGV[$i], $ARGV[$i], $ARGV[$i]);
}
Convert list of hexadecimal numbers into decimal and binary
for ($i = 0; $i < @ARGV; $i++) {
    $val = hex($ARGV[$i]);
    printf("0x%x\t= %d\t= 0b%b\n", $val, $val, $val);
}
Convert list of binary numbers into decimal and hexadecimal
for ($i = 0; $i < @ARGV; $i++) {
    # The binary numbers you type must start with '0b'
    $val = oct($ARGV[$i]);
    printf("0b%b\t= %d\t= 0x%x\n", $val, $val, $val);
}
 17 нояб. 2014 г., 22:25
Было бы более идиоматичным Perl, если бы вы использовали foreach для прохождения элементов данных вместо C-стиля для for () для прохождения индексов массива.
 16 июн. 2015 г., 10:08
& Quot; 0x% х & Quot; выведет в нижнем регистре. Используйте & quot; 0x% X & quot; для правильного верхнего регистра.

Вы можете использовать классическийprintf().

printf("%x",$d);
 16 июн. 2015 г., 10:07
& Quot;% х & Quot; выведет в нижнем регистре. Используйте & quot;% X & quot; для правильного верхнего регистра.

Ваш ответ на вопрос