您的位置:首页 >> Web开发 >> CGI技术 >> 正文
CGI技术 RSS
 

pack/unpack用法----心得笔记

http://www.rdxx.com 06年08月12日 00:00 我要投稿

关键词: 心得

  最近在看perlpacktut的document,整理了下面的文章,
希望对大家有帮助,瞭解pack/unpack怎麽用...
还没写完..後面跟C有关係..
======================================
Pack 与unpack使用说明:
资料?碓凑诈erlpacktut,初学perl的时候,想必大家对於pack与unpack都不是很瞭解,因此本人撷取perldoc裡面的文章,为各位简单说明pack与unpack的使用方法:首先定义一下pack与unpack:pack可视为将一系列的片段的数值打包在一起,可用於对dev档案、socket、memory的读写,因为这些需要一块完整的memory,而且需要事先打包成特定格式;而unpack可以视为将将这些完整的 memory切割计算,取得我们所需要各部分的Variable。例子如下:
print pack(“H2”x10,map{ “3$_” } (0..9);
得到
0123456789
因为ASCII中30~39代表数字0-9。所以pack後可以得到ascii编码的0->9,而我们可以利用unpack将string作逆向操作。
print unpack(“H*”,”0123456789”);
得到
30313233343536373839
同样的作法可以用在中文字中,至是你要注意OS的编码格式,UTF-8、GB2312、Big5得到的数值?K不会相同。

Pack与unpack也可以用在对於对於固定格式的文件作处理的情形下:
代码:

Date |Description | Income|Expenditure
01/24/2001 Ahmed's Camel Emporium 1147.99
01/28/2001 Flea spray 24.99
01/29/2001 Camel rides to tourists 235.00


看到上面格式,想必大家很多人都用用substr将固定栏位中的字串取出?恚蚶糜悬c点複杂的Regular Expression将上面的文件栏位匹配出?恚鴮?际上我们要将上面栏位一个一个匹配出?砜梢杂靡恍懈愣╘
例子:
while(<FF>){
my($date,$desc,$income,$expend) = unpack(“A10xA27xA7xA*”);
}
简单说明:A表示ASCII,A10表示10个ASCII character,x表示null byte也等於skip a byte,也就是说我们要跳过一个char(|),然後接着27个ASCII char,然後跳过一个vhar,再接上7个ASCII,在跳过一个char,最後A*表示不管後面char有多少个,我全含括进?怼

这样子就可以得到各个栏位相对应的资料,很简单吧!:) 不需要什麽太多的技巧,一行搞定。之後将income与expend作加总,得到total_income、total_expend,数值,然後再输出的时候,如果也要格式对称,要怎麽办?大多数人都会用format或sprintf,然後一行一行很辛苦的,将结果输出。其

 
 
标签: 心得 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站