繁体   English   中英

如何在Perl中将浮点数转换为十六进制字符串?

[英]How do I convert a floating-point number into a hex string in Perl?

为了确保我的计算对于所有情况都是正确的,我希望将结果(双精度数)看作十六进制或二进制字符串。 如何在Perl获取十六进制/二进制字符串或此数字的字节表示? Java ,我可以使用,例如,

double d = performMyCalculations();
System.out.format("%x\n", Double.doubleToLongBits(d));  

为此目的,它将打印3fc33333333333330.15 如何在Perl获得类似的结果?

Perl的pack()unpack()函数允许您来回转换二进制表示。

my $double_bits = unpack "Q", pack "d", 0.15;
printf "%x\n", $double_bits;
# Output: 3fc3333333333333

pack "d"包含double作为其二进制表示。 unpack "Q"我们将此位模式解压缩为无符号的64位整数。 所以这会将double的位模式重新解释/转换为整数,然后我们可以用十六进制数字输出。

Perl还有一个格式化选项来显示十六进制浮点数:

printf "%a\n", 0.15;
# Output: 0x1.3333333333333p-3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM