如何将BINARY文件转换/操作为ASCII文件?

时间:2009-07-15 10:38:49

标签: perl

我正在寻找一种方法将TEXT字符从4byte BINARY文件转换为数组或TEXT文件,

假设我的输入文件是:

00000000  2e 00 00 00 01 00 00 00  02 00 00 00 03 00 00 00  |................|
00000010  04 00 00 00 05 00 00 00  06 00 00 00 07 00 00 00  |................|
00000020  08 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000070  00 00 00 00 00 00 00 00                           |........|
00000078

我想要的输出是:

46,1,2,3,4,5,6,7,8,9,0,0...

输出可以是TEXT文件或数组。

我注意到打包/解压缩功能可能对此有所帮助,但我无法确定如何正确使用它们,

一个例子很好。

3 个答案:

答案 0 :(得分:9)

使用unpack

local $/;
@_=unpack("V*", <>);

获取一个数组。因此效率低下(不要尝试大文件)示例:

perl -e 'local$/;print join(",",map{sprintf("%d",$_)}unpack("V*",<>))' thebinaryfile

答案 1 :(得分:1)

答案取决于您认为的ASCII字符。 128以下的任何东西在技术上都是ASCII字符,但我假设你的意思是你通常在文本文件中找到的字符。在这种情况下,试试这个:

#!/usr/bin/perl

use strict;
use warnings;
use bytes;

$/ = \1024; #read 1k at a time
while (<>) {
    for my $char (split //) {
        my $ord = ord $char;
        if ($char > 31 and $char < 127 or $char =~ /\r\n\t/) {
            print "$ord,"
        }
    }
}

答案 2 :(得分:0)

od -t d4 -v <filename>