pack unpack 函式解釋

2021-05-17 12:20:57 字數 2246 閱讀 8841

函式名

pack

呼叫語法

formatstr = pack(packformat, list);

解說把乙個列表或陣列以在實際機器存貯格式或c等程式語言使用的格式轉化(包裝)到乙個簡單變數中。引數packformat包含乙個或多個格式字元,列表中每個元素對應乙個,各格式字元間可用空格或tab隔開,因為pack忽略空格。

除了格式a、a和@外,重複使用一種格式多次可在其後加個整數,如:

$twoints = pack ("i2", 103, 241);

把同一格式應用於所有的元素則加個*號,如:

$manyints = pack ("i*", 14, 26, 11, 83);

對於a和a而言,其後的整數表示要建立的字串長度,重複方法如下:

$strings = pack ("a6" x 2, "test1", "test2");

格式@的情況比較特殊,其後必須加個整數,該數表示字串必須的長度,如果長度不夠,則用空字元(null)補足,如:

$output = pack ("a @6 a", "test", "test2");

pack函式最常見的用途是建立可與c程式互動的資料,例如c語言中字串均以空字元(null)結尾,建立這樣的資料可以這樣做:

$cstring = pack ("ax", $mystring);

下表是一些格式字元與c中資料型別的等價關係:

字元  

等價c資料型別

cchar

ddouble

ffloat

iint

iunsigned int (or unsigned)

llong

lunsigned long

sshort

sunsigned short

完整的格式字元見下表。

格式字元  描述a

用空字元(null)補足的字串

a用空格補足的字串

b位串,低位在前

b位串,高位在前

c帶符號字元(通常-128~127)

c無符號字元(通常8位)

d雙精度浮點數

f單精度浮點數

h十六進製制數串,低位在前

h十六進製制數串,高位在前

i帶符號整數

i無符號整數

l帶符號長整數

l無符號長整數

n網路序短整數

n網路序長整數

p字串指標

s帶符號短整數

s無符號短整數

u轉化成uuencode格式

vvax序短整數

vvax序長整數

x乙個空位元組

x回退乙個位元組

@以空位元組(null)填充

函式名unpack

呼叫語法

@list = unpack (packformat, formatstr);

解說unpack與pack功能相反,將以機器格式存貯的值轉化成perl中值的列表。其格式字元與pack基本相同(即上表),不同的有:a格式將機器格式字串轉化為perl字串並去掉尾部所有空格或空字元;x為跳過乙個位元組;@為跳過一些位元組到指定的位置,如@4為跳過4個位元組。下面看乙個@和x合同的例子:    $longrightint = unpack ("@* x4 l", $packstring);

此語句將最後四個位元組看作無符號長整數進行轉化。下面看乙個對uuencode檔案解碼的例子:

1 : #!/usr/local/bin/perl

2 :

3 : open (codedfile, "/u/janedoe/codefile") ||

4 : die ("can't open input file");

5 : open (outfile, ">outfile") ||

6 : die ("can't open output file");

7 : while ($line = )

11: close (outfile);

12: close (codedfile);

當將pack和unpack用於uuencode時,要記住,雖然它們與unix中的uuencode、uudecode工具演算法相同,但並不提供首行和末行,如果想用uudecode對由pack的輸出建立的檔案進行解碼,必須也把首行和末行輸出(詳見unix中uuencode幫助)。

Perl函式pack unpack解釋

函式名 pack 呼叫語法 formatstr pack packformat,list 解說把乙個列表或陣列以在實際機器存貯格式或c等程式語言使用的格式轉化 包裝 到乙個簡單變數中。引數packformat包含乙個或多個格式字元,列表中每個元素對應乙個,各格式字元間可用空格或tab隔開,因為pac...

Perl函式pack unpack解釋

函式名 pack 呼叫語法 formatstr pack packformat,list 解說把乙個列表或陣列以在實際機器存貯格式或c等程式語言使用的格式轉化 包裝 到乙個簡單變數中。引數packformat包含乙個或多個格式字元,列表中每個元素對應乙個,各格式字元間可用空格或tab隔開,因為pac...

轉貼 Perl函式pack unpack解釋 z

函式名pack 呼叫語法 formatstr pack packformat,list 解說把乙個列表或陣列以在實際機器存貯格式或c等程式語言使用的格式轉化 包裝 到乙個簡單變數中。引數packformat包含乙個或多個格式字元,列表中每個元素對應乙個,各格式字元間可用空格或tab隔開,因為pack...