生活随笔
收集整理的這篇文章主要介紹了
pack unpakc
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 函數名 | 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數據類型 | | 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)補足的字符串 | | 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幫助)。 | |
總結
以上是生活随笔為你收集整理的pack unpakc的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。