1

この質問から:

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" '

ご回答ありがとうございます。
乾杯!

4

2 に答える 2

4

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

申し訳ありませんが、以前の質問に対するhobbsの回答を誤解しています。

$unparray[0] 倍精度浮動小数点値ですしかし、length(たとえば)Cのsizeof演算子とは異なり、引数のサイズはわかりません。むしろ、引数を文字列に変換してから、その文字列の長さを通知します。

たとえば、これは次のとおりです。

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

これを印刷します:

1

に設定$aされるため、長さは、2.0として文字列化されます。21

于 2011-11-30T04:20:29.163 に答える