2
的長度考慮這個簡單的例子:現在的Perl包/解包和二進制字符串
$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] '
,我期望一個雙精度浮點是八個字節,所以第一個length($a)
是正確的。但是爲什麼解壓縮後的長度(length($unparray[0])
)報告3 - 當我試圖返回完全相同的方式(雙精度,即8個字節)並且項目(255)的值被正確保存?
感謝那@hobbs;包從整數變成「double-value packed bytestring」;和其他方式(解壓縮),我希望以某種方式從「double-value packed bytestring」中獲得雙精度浮點數在$'unparray'中;但它似乎是'$ unparray'中的字符串!感謝您澄清這一點 - 歡呼! – sdaau
@sdaau,你可以在'@ unparray'中獲得雙精度浮點數。 'length'找到字符串的長度,所以它需要一個字符串,所以如果需要的話它會將其參數串聯起來。 – ikegami
感謝那@ikegami - 「'長度'發現字符串的長度」似乎是我未能理解的絆腳石。乾杯! – sdaau