33

如何$d = 1024在 Perl 中将十进制的数字 0xFF 转换为十六进制的 0xFF?

d变量需要分配给不同的变量并打印出来,因此为了便于阅读,我要求它采用十六进制格式。

4

4 回答 4

51

1024十进制不是0xFF十六进制。相反,它是0x400.

您可以将sprintf用作:

my $hex = sprintf("0x%X", $d);
于 2012-05-07T11:12:44.690 回答
29

警告:在 2 64 ≅ 10 19处sprintf 溢出,在 32 位上甚至已经在 2 32 ≅ 4×10 9处溢出。

对于大数,启用 lexical pragma bigintas_hex记录在Math::BigInt.

use bigint;
my $n = 2**65;
print $n->as_hex;   # '0x20000000000000000'
于 2012-05-07T11:54:43.277 回答
1

我将这些片段放入我的 $PATH 中的 Perl 文件中:

将十进制数字列表转换为十六进制和二进制

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);
}
于 2014-03-01T14:32:58.440 回答
0

您可以使用经典的printf()

printf("%x",$d);
于 2012-05-07T11:13:32.323 回答