打印

关于perl中的函数pack和unpack

关于perl中的函数pack和unpack

小弟初学perl,请教高手关于pack和unpack的问题
这两个函数是不是可以理解为加密和解密
pack(TEMPLATE,EXPR) 把EXPR的内容按照TEMPLATE的格式进行加密
unpack(TEMPLATE,EXPR) 把EXPR的内容按照TEMPLATE的格式进行解密

但是我个人做了一个实验
#!/usr/bin/perl
$a=pack("H2",30);

print "[" . $a . "]";
print "[" . unpack("i",$a) . "]";

返回的结果确实
[0][]
为什么我无法恢复到以前的30那个值啊?
pack首先会把30转换为一个H2的数值,然后unpack会把$a按照i解压出来。但是如果要完成这个步骤,需要知道的是30是被pack当作什么类型的数值才能在unpack的TEMPLATE中写入相应的格式值吧。 是不是不应该是i。请高手执教一二,谢谢!

TOP

而且还有一点不理解的是:
#!/usr/bin/perl
# sum - compute 16-bit checksum of all input files
$checksum = 0;
while (<>) { $checksum += unpack("%16C*", $_) }
$checksum %= (2 ** 16) - 1;
print "$checksum\n";

以上代码中unpack("%16C*", $_) 不是把$_转换成为C麽?
C是指无符号字符(通常8位)
但是转换后得到的却是数字
$a="a";
print "[" . $a . "]"

$a="97";
print "[" . $a . "]"

$a="9";
print "[" . $a . "]"
得到的都是97

TOP

明明是打包解包,你非要理解成加密解密。

TOP

问题的关键不是在于打包解包  我不理解实现机制和用法  能解释一下么? 谢谢

TOP

搞不懂机制你应该去看 perlpacktut,而不是东问西问。

TOP

学习第一,开始学习Perl。

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-8-29 13:03 京ICP证060528 号

Designed By 17DST