Perl函數pack/unpack解釋

來源:互聯網
上載者:User
函數名 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 字元(null)補足,如:
    $output = pack ("a @6 a", "test", "test2");
   pack函數最常見的用途是建立可與C程式互動的資料,例如C語言中字串均以Null 字元(null)結尾,建立這樣的資料可以這樣做:
    $Cstring = pack ("ax", $mystring);
   下表是一些格式字元與C中資料類型的等價關係:

字元   等價C資料類型
C char
d double
f float
i int
I unsigned int (or unsigned)
l long
L unsigned long
s short
S unsigned short

   完整的格式字元見下表。
格式字元   描述
a 用Null 字元(null)補足的字串
A 用空格補足的字串
b 位串,低位在前
B 位串,高位在前
c 帶符號字元(通常-128~127)
C 無符號字元(通常8位)
d 雙精確度浮點數
f 單精確度浮點數
h 十六進位數串,低位在前
H 十六進位數串,高位在前
i 帶正負號的整數
I 不帶正負號的整數
l 帶符號長整數
L 無符號長整數
n 網路序短整數
N 網路序長整數
p 字串指標
s 帶符號短整數
S 無符號短整數
u 轉化成uuencode格式
v VAX序短整數
V VAX序長整數
x 一個空位元組
X 回退一個位元組
@ 以空位元組(null)填充
函數名 unpack
調用文法 @list = unpack (packformat, formatstr);
解說 unpack與pack功能相反,將以機器格式存貯的值轉化成Perl中值的列表。其格式字元與pack基本相同(即上表),不同的有:A格式將機器格式字串轉化為Perl字串並去掉尾部所有空格或Null 字元;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 = <CODEDFILE>) {
8 : $decoded = unpack("u", $line);
9 : print OUTFILE ($decoded);
10: }
11: close (OUTFILE);
12: close (CODEDFILE);

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.