簡體   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