3

次の短い例を考えてみましょう。

$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

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

ここで、倍精度浮動小数点数は 8 バイトであると予想されるため、最初の値length($a)は正しいです。しかし、unpack ( length($unparray[0])) の後の長さが 3 と報告されるのはなぜですか?まったく同じ方法 (倍精度、つまり 8 バイト) に戻ろうとすると、アイテムの値 (255) が正しく保持されます。

4

1 に答える 1

6

パックしたものを解凍すると、元の値が返されます。最初の値は 255 です。255 の文字列化は "255" で、これは 3 文字の長さであり、それlengthがあなたに伝えます。

于 2011-11-30T03:45:12.800 に答える