Perl函数pack/unpack(二进制读写)
生活随笔
收集整理的這篇文章主要介紹了
Perl函数pack/unpack(二进制读写)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 函數名 | 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中數據類型的等價關系:
|
| 格式字符?? | 描述 |
| 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格式 |
| v | VAX序短整數 |
| V | VAX序長整數 |
| 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 = <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幫助)。 |
轉載于:https://www.cnblogs.com/starspace/archive/2009/01/18/1377945.html
總結
以上是生活随笔為你收集整理的Perl函数pack/unpack(二进制读写)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS.Net 的一些小技巧
- 下一篇: 小功能 获取一段汉字的拼音首字母