1

从这个问题:

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

我了解到,@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" '

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

4

2 回答 2

4

是什么让你认为它没有被存储为双重?

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
于 2011-11-30T04:27:49.917 回答
3

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

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

例如,这个:

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

将打印:

1

因为它设置$a2.0,它被字符串化为2,它具有长度1

于 2011-11-30T04:20:29.163 回答