如何在Perl中将十进制数转换为十六进制字符串?
例如,我想将2001
转换为"0x07"和"0xD1"。
这适用于那种情况:
($x,$y) = map { "0x$_" }
sprintf("%04X\n", 2001) =~ /(..)(..)/;
但我想知道你真正想做什么。如果你想获取 UTF-16 编码,这不是你想要的方式。
如果你试图弄清楚紧凑二进制数据的布局,则应使用 unpack
。 "C4" 格式可用于 4 字节整数。
$int = 2001;
$bint = pack("N", $int);
@octets = unpack("C4", $bint);
printf "%02X " x 4 . "\n", @octets;
# prints: 00 00 07 D1
对于某些用途,您可以使用printf
的向量打印功能:
printf "%v02X\n", pack("N", 2001);
# prints: 00.00.07.D1
printf "%v02X\n", 255.255.255.240;
# prints: FF.FF.FF.F0
我不确定您需要的确切格式,但将其转换为十六进制的一种方法是:
sprintf("%x", 2001)
pack("S", 2001)
。 - Marcelo Cantos