Как преобразовать десятичную шестнадцатеричную в Perl? Как преобразовать число, $d = 1024, в десятичном формате в 0xFF в шестнадцатеричном виде в Perl? Переменная d должна быть назначена другой переменной и печататься, поэтому для удобства чтения я должен быть в шестнадцатеричном формате. Ответ 1 1024 в десятичном формате не 0xFF в шестнадцатеричном формате. Вместо этого это 0x400. Вы можете использовать sprintf как: my $hex = sprintf("0x%X", $d); Ответ 2 Предостережение: sprintf переполнение при 2 64 ≅ 10 19 на 32-битном даже уже при 2 32 ≅ 4 × 10 9. Для больших чисел включите лексическую прагму bigint. as_hex задокументирован в Math::BigInt. use bigint; my $n = 2**65; print $n->as_hex; # '0x20000000000000000' Ответ 3 Я помещал эти фрагменты в файлы Perl в $PATH: Преобразование списка десятичных чисел в шестнадцатеричный и двоичный for ($i = 0; $i < @ARGV; $i++) { printf("%d\t= 0x%x\t= 0b%b\n", $ARGV[$i], $ARGV[$i], $ARGV[$i]); } Преобразование списка шестнадцатеричных чисел в десятичные и двоичные for ($i = 0; $i < @ARGV; $i++) { $val = hex($ARGV[$i]); printf("0x%x\t= %d\t= 0b%b\n", $val, $val, $val); } Преобразование списка двоичных чисел в десятичные и шестнадцатеричные 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); } Ответ 4 Вы можете использовать классический printf(). printf("%x",$d);
Ответ 1 1024 в десятичном формате не 0xFF в шестнадцатеричном формате. Вместо этого это 0x400. Вы можете использовать sprintf как: my $hex = sprintf("0x%X", $d);
Ответ 2 Предостережение: sprintf переполнение при 2 64 ≅ 10 19 на 32-битном даже уже при 2 32 ≅ 4 × 10 9. Для больших чисел включите лексическую прагму bigint. as_hex задокументирован в Math::BigInt. use bigint; my $n = 2**65; print $n->as_hex; # '0x20000000000000000'
Ответ 3 Я помещал эти фрагменты в файлы Perl в $PATH: Преобразование списка десятичных чисел в шестнадцатеричный и двоичный for ($i = 0; $i < @ARGV; $i++) { printf("%d\t= 0x%x\t= 0b%b\n", $ARGV[$i], $ARGV[$i], $ARGV[$i]); } Преобразование списка шестнадцатеричных чисел в десятичные и двоичные for ($i = 0; $i < @ARGV; $i++) { $val = hex($ARGV[$i]); printf("0x%x\t= %d\t= 0b%b\n", $val, $val, $val); } Преобразование списка двоичных чисел в десятичные и шестнадцатеричные 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); }