我正在寻找一种方法将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文件或数组。
我注意到打包/解压缩功能可能对此有所帮助,但我无法确定如何正确使用它们,
一个例子很好。
答案 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>