2
의 길이 : 첫 번째 length($a)
가 올 수 있도록펄 팩 /이 짧은 예제를 생각해 풀고 바이너리 문자열
$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($unparray[0])
) 정확히 같은 방식 (배정도, 즉 8 바이트)으로 돌아가려고 할 때 3 항목 (255)의 값이 올바르게 보존됩니까?
고맙습니다. @hobbs; pack은 Integer에서 "double-value packed bytestring"으로 이동합니다. 다른 방법으로 (언팩), 나는 어떻게 든'unparray'에서 double-precision float에 "double-value packed bytestring"을 얻을 것이라고 예상했다; 하지만 그것들은'$ unparray'의 문자열입니다! 이것을 명확히 해 주셔서 감사합니다 - 건배! – sdaau
@sdaau,'@ unparray'에서 배정도 수레를 얻습니다. 'length'는 string의 길이를 찾습니다. 그래서 문자열이 필요합니다. 그래서 필요한 경우 인수를 문자열로 나타냅니다. – ikegami
@ ikegami 주셔서 감사합니다 - "길이는 문자열의 길이를 찾습니다"내가 이해하지 못한 걸림돌이었던 것 같습니다. 건배! – sdaau