perl pack/unpack

Perl函数pack/unpack解释:http://hi.baidu.com/powersaven/blog/item/26f619c5a8d41bc239db49d6.html

[Perl]pack/unpack函数--利用模板控制文字格式:http://blog.csdn.net/peng_zhou/article/details/3962429

************************************************************************************************************

简单的说:

unpack:

将perl字串stirng转化为对应的机器码字串,如my $str_asc = unpack("H*",$str);将字符串$str转换为其对应的十六进制字符串$str_asc。

“1”->"\x31"即是:$str_x31 = unpack("H*","1");目的是对机器码字串进行操作。

应用:

一般,需要得到机器码,要对机器码操作时(如读取后需要改写二进制文件、编码格式转换、正则操作等),要unpack一下。

1)perl字符某种编码格式(如“UTF-16”)对应的机器码

my $char = "你好世界";

my $c1 = unpack("H*", encode("UTF-16", $char));

2)读取编码格式文件(如“UTF-16”)

my $c1 = unpack("H*", encode("UTF-16", decode("UTF-16",$data)));

3)读取二进制文件

binmode(PF_IN);

read(PF_IN, $pDataHead,44,0);

my $binData = unpack("H*",$pDataHead)

************************************************************************************************************

pack:

作用正好相反:将机器码字符串转化为对应的perl字符串str。“\x31”->"1"即是:$str_1 = pack("H*","31")。

应用:

一般,需要输出或打包机器码串之前,需要pack一下;或已知机器码串,需要得到对应的字符串时,需要pack。

1)、二进制写文件之前,需要将机器码串(如"FFFE3031")pack后输出到文件;

binmode(PF_OUT);

print PF_OUT pack("H*","FFFE").encode("utf16le",$line);

2)、网络报文发送前,需要pack将机器码串打包;解析前需要先unpack

************************************************************************************************************

说明:

1)bimode读取二进制文件,实际读到的不是机器码,仍然是perl字符串,需要unpack后进行操作。

binmode:如果在文本文件中发现 ^Z 字符,则可能会造成程序退出或者碰到换行符转换方面的问题;通过指定二进制文件模式避免该问题。

写二进制文件前,需要将二进制码串pack为相应的perl字符串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值