2013-06-21 43 views
0

有沒有辦法獲得「解包」呼叫「消耗」的字節數? 我只是想解析(解壓縮)從一串長長的不同結構的幾個步驟,比如以下:如何獲得解包消耗的字節數

my $record1 = unpack "TEMPLATE", substr($long_str, $pos); 

# Advance position pointer 
$pos += NUMBER_OF_BYTES_CONSUMED_BY_LAST_UNPACK(); 

# Other codes that might determin what to read in following steps 
# ... 

# Read again at the new position 
my $record2 = unpack "TEMPLATE2", substr($long_str, $pos); 

回答

3

但這似乎是一個明顯的遺漏在unpack,不是嗎?作爲安慰獎,您可以在解包模板的末尾使用a*來返回輸入字符串中未使用的部分。

# The variable-length "w" format is to make the example slightly more interesting. 
$x = pack "w*", 126..129; 
while(length $x) { 
    # unpack one number, keep the rest packed in $x 
    ($n, $x) = unpack "wa*", $x; 
    print $n; 
} 

如果填充字符串是很長的,這不是因爲它讓每一個你做一個解壓縮時間的字符串「剩餘」部分的副本是一個好主意。

+0

感謝Wumpus,該解決方案解決了我的問題,儘管存在複製字符串的內存和CPU使用損失:) – 6bb79df9