轉貼 Perl函式pack unpack解釋 z

2021-04-22 18:59:58 字數 2208 閱讀 5473

函式名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幫助)。

喬幫主的推薦,學習php得pack和unpack函式得好資料。

轉貼 Perl學習手札

目錄 1.關於perl 1.1 perl的歷史 1.2 perl的概念 1.3 特色 1.4 使用perl的環境 1.5 開始使用 perl 1.6 你的第一支perl程式 2.純量變數 scalar 2.1 關於純量 2.1.1 數值 2.1.2 字串 2.1.3 數字與字串轉換 2.2 使用你自...

perl 函式指標

還是研究perl.我的意圖,是把所有使用者介面關注的 perl呼叫,用乙個函式進行包裝。所以,我需要進行一層wrap.也就是說,函式要呼叫函式。經過與同事幾個小時的研究,兩人一番討論。終於找到了方法。這裡面有兩個關鍵問題,乙個是函式指標,另乙個是引數。引數對於perl來說,真不是問題,這是我這乙個多...

Perl 函式引用

函式的引用 ref func func的定義在其他位置 不要 當 func 時為執行函式,返回值再引用。當 func 時為執行函式,返回值再引用。oracle jhoa 3 cat 3.pl sub generate greeting 引用 rs generate greeting print rs...