perl的pack and unpack的H h到底怎么用?

perl的pack and unpack的H h到底怎么用?

pack 把一串数字或文字..打包成一块memory....得到的可能是文字..或binary内容
例如我们要把字串透过socket传到远方..其实Socket内部就有帮忙把ip做pack的动作..

unpack把一块memory...分解成很多块....每一块可以是文字的一部份..或是memory中的一小块...
例如:接收到远方回传值时..Socket也会帮忙做unpack动作...把ip做unpack动作..

H跟h..是因为很久以前电脑演进中..有的机器从高位先读..有的机器从低位先读....

怎麽pack就要怎麽unpack...
或者当你有一串中文字..你希望传给别人时..有时候会因为编码问题无法显示..
这时候可以用unpack先将文字转换成16进制..然後请别人再pack回来...

perldoc perl里面有关於pack/unpack蛮详细的说明...
多谢ls的.
我不是H跟h的区别.就H这个参数来说,你的意思是将List 转换成功勋进制字符串?!比如说一个a转换后十六进制字符什么呢?

"或者当你有一串中文字..你希望传给别人时..有时候会因为编码问题无法显示..
这时候可以用unpack先将文字转换成16进制..然後请别人再pack回来..."
你是说不必一定pack,然后unpack?两者顺序可以调换?
我理解成一定要先pack 然后unpack了............
试了下面这个,
$buf=unpack("H10","1ABCD")  
print "this is  $buf\n";
$buff=pack("H10",$buf);
print "this is $buff\n";   
输出this is 3141424344
      this is 1ABCD
这样就对了
但我还是不太明白,在同一台机器上,对ABCD先pack,然后unpa ck,用的格式一样,为啥最后得到abcd,这好像和
"怎麽pack就要怎麽unpack..."矛盾了?


QUOTE:
原帖由 linewer 于 2008-1-8 09:50 发表
试了下面这个,
$buf=unpack("H10","1ABCD")  
print "this is  $buf\n";
$buff=pack("H10",$buf);
print "this is $buff\n";   
输出this is 3141424344
      this is 1ABCD
这样就对了
但我还是不太 ...

哪儿来的'abcd' ?


QUOTE:
原帖由 apile 于 2008-1-8 15:14 发表

为什麽ABCD转成abcd...是...那个$buf在unpack回来的时候..变成小写..
因为对16进制而言..ABCD与abcd是一样的<------->\0xAB\0xCD跟\0xab\0xcd是一样的...
.

这个偶倒是不知道的说.
Learning Perl 上只讲了一点,觉得不是很明白,看过perldoc perlpacktut还是不太明白的,所以上了发帖。
我再看看perlpacktut,有问题再请教
btw,多谢apile!