根据此计算器网站(link text),将3从十进制转换为双精度时,我应该4008 0000 0000 0000
。
当使用Perl pack函数时,使用参数“d> *”,我希望在使用此函数时看到4008 0000 0000 0000
:
print $File pack("d>*", 3);
但是当我对Perl输出文件进行“hexdump”时,我看到0840 0000 0000 0000
。
我认为它可能属于大/小端,但在尝试小端时,
print $File pack("d<*", 3);
我明白了:0000 0000 0000 4008
如果我想从Perl 4008 0000 0000 0000
输出中获得结果pack
该怎么办?
顺便说一下,当使用“float”时 - 一切都像预期的那样有效。
答案 0 :(得分:4)
你对Perl中字节顺序的直觉是正确的,但我认为hexdump输出并不意味着你的想法。看起来hexdump以一致但违反直觉的顺序显示每对字节。以下是一些可以运行以获得轴承的实验。
# bytes are stored in the order that they are printed
$ perl -e 'print "\x{01}\x{02}\x{03}\x{04}"' | od -c
0000000 001 002 003 004
0000004
# perl reads the bytes in the correct order
$ perl -e 'print "\x{01}\x{02}\x{03}\x{04}"' | perl -ne 'print map{ord,$"}split//'
1 2 3 4
# but the way hexdump displays the bytes is confusing (od -h gives same output)
$ perl -e 'print "\x{01}\x{02}\x{03}\x{04}"' | hexdump
0000000 0201 0403
0000004