Ответ 1
1024
в десятичном формате не 0xFF
в шестнадцатеричном формате. Вместо этого это 0x400
.
Вы можете использовать sprintf как:
my $hex = sprintf("0x%X", $d);
Как преобразовать число, $d = 1024
, в десятичном формате в 0xFF в шестнадцатеричном виде в Perl?
Переменная d
должна быть назначена другой переменной и печататься, поэтому для удобства чтения я должен быть в шестнадцатеричном формате.
1024
в десятичном формате не 0xFF
в шестнадцатеричном формате. Вместо этого это 0x400
.
Вы можете использовать sprintf как:
my $hex = sprintf("0x%X", $d);
Предостережение: 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'
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);
}
Вы можете использовать классический printf().
printf("%x",$d);