[英]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.