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

23

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

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

1024 = 4 * 256 = 0x400:perl -Mbigint -E 'say 1024->as_hex' печатает 0x400 tinmarino
Для обратного, от шестнадцатеричного до десятичного, см. Вопрос переполнения стекаHow can I convert hex strings into numbers in Perl?. Peter Mortensen
Только один маленький намек: 1024 в гексе - это 0x200, а 0xFF - 255 в десятичном виде. user2731903

Ваш Ответ

4   ответа
41

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

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

my $hex = sprintf("0x%X", $d);
Нет более быстрого способа сделать это (для одного лайнера)?
24

Предостережение: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'
1

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);
}
& Quot; 0x% х & Quot; выведет в нижнем регистре. Используйте & quot; 0x% X & quot; для правильного верхнего регистра.
Было бы более идиоматичным Perl, если бы вы использовали foreach для прохождения элементов данных вместо C-стиля для for () для прохождения индексов массива.
0

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

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

Похожие вопросы