繁体   English   中英

如何在Perl中解压缩双精度值?

[英]How do I unpack a double-precision value in Perl?

从这个问题:

bytearray-Perl打包/解压缩和二进制字符串的长度

我了解到@unparray = unpack("d "x5, $aa); 下面的代码段中的结果中的字符串项处于反unparray -而不是双精度数字(正如我预期的那样)。

是否可以通过以下代码段中的$aa字节串获取双精度值数组?

$a = pack("d",255);
print length($a)."\n";
# prints 8

$aa = pack("ddddd", 255,123,0,45,123);
print length($aa)."\n";
# prints 40

@unparray = unpack("d "x5, $aa);
print scalar(@unparray)."\n";
# prints 5

print length($unparray[0])."\n" 
# prints 3

printf "%d\n", $unparray[0] '
# prints 255

# one liner:
# perl -e '$a = pack("d",255); print length($a)."\n"; $aa = pack("ddddd", 255,123,0,45,123); print length($aa)."\n"; @unparray = unpack("d "x5, $aa); print scalar(@unparray)."\n"; print length($unparray[0])."\n" '

非常感谢您的任何回答,
干杯!

是什么让您认为它没有存储为double?

use feature qw( say );

use Config      qw( %Config );
use Devel::Peek qw( Dump );

my @a = unpack "d5", pack "d5", 255,123,0,45,123;

say 0+@a;             # 5
Dump $a[0];           # NOK (floating point format)
say $Config{nvsize};  # 8 byte floats on this build

抱歉,但是您误解了霍布斯对先前问题的回答。

$unparray[0] 双精度浮点值; 但是length不像(比如说)C的sizeof运算符,并且不会告诉您其参数的大小。 相反,它将参数转换为字符串,然后告诉您该字符串的长度。

例如,这:

my $a = 3.0 / 1.5;
print length($a), "\n";

将打印此:

1

因为它将$a设置$a 2.0 ,它被字符串化为2 ,其长度为1

暂无
暂无

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

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