免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3235 | 回复: 6
打印 上一主题 下一主题

请问为何我把一些十六进制转换为ascii码后,会产生些其他东西出来? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-15 14:46 |只看该作者 |倒序浏览
比如说我有一个文本文件,里面是一个zip文件的十六进制代码
我想把它还原为zip文件
我采取的方法是转换为ascii码再保存
但是发现跟原始的zip文件相比多了些文件
我的代码如下
  1. use strict;
  2. use warnings;

  3. open my $fd,"2.txt";
  4. undef $/;
  5. my $word=<$fd>;
  6. $word=~/(504B0304.*?)\n/;
  7. $a=pack( 'H*', "$1" );
  8. print $a;
复制代码


2.txt就是文本文件
b.zip为原始的.zip文件
而a.zip是我用代码转换后的zip文件,多了些字节
请问各位朋友,原因是什么?谢谢

roby.rar

10.04 KB, 下载次数: 66

论坛徽章:
0
2 [报告]
发表于 2007-12-15 15:33 |只看该作者
你的文本文件格式是dos的

论坛徽章:
0
3 [报告]
发表于 2007-12-15 21:01 |只看该作者
那么如何解决呢? 请指点
感谢

论坛徽章:
0
4 [报告]
发表于 2007-12-15 22:12 |只看该作者
perl -pi -e "s/\r//g" 2.txt

论坛徽章:
0
5 [报告]
发表于 2007-12-15 22:32 |只看该作者
谢谢楼上
在你的先前提示下
我仔细观察了下
发现是0a变成 0d0a
然后翻了下大骆驼
用:raw搞定

非常感谢

论坛徽章:
0
6 [报告]
发表于 2007-12-15 22:55 |只看该作者
原帖由 roby 于 2007-12-15 22:32 发表
谢谢楼上
在你的先前提示下
我仔细观察了下
发现是0a变成 0d0a
然后翻了下大骆驼
用:raw搞定

非常感谢

用:raw是如何搞定的呢?分享一下?

论坛徽章:
0
7 [报告]
发表于 2007-12-15 23:43 |只看该作者
原帖由 __lxmxn__ 于 2007-12-15 22:55 发表

用:raw是如何搞定的呢?分享一下?



  1. use strict;
  2. use warnings;
  3. open my $fd,"<:raw","word.txt";
  4. undef $/;
  5. my $word=<$fd>;
  6. my $i=1;
  7. my $cib;
  8. while($word=~/(504B0304.*?)\n/g){
  9.         open(ROBY,">:raw","$i.zip");
  10.         $cib=pack('H*',"$1");
  11.     print ROBY  $cib;
  12.         close(ROBY);
  13.         $i=$i+1;
  14. }
复制代码


:raw 的含义是  二进制模式;不做处理
见大骆驼P821面
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP