2009-07-15 48 views
0

我正在尋找一種方式來從4個字節的二進制文件,以數組或文本文件中把文本字符,如何將BINARY文件轉換/處理爲ASCII文件?

比方說我的輸入文件是:

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文件或數組。

我注意到包/解包功能可以幫助在這裏,但我想不出如何正確地使用它們,

一個例子是好的。

回答

9

使用unpack

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

讓你的數組。因此,作爲一個效率低下(不要試圖在巨大的文件)例如:

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

謝謝!我測試了它並完成了工作!如此優雅和簡單! – YoDar 2009-07-15 13:07:02

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," 
     } 
    } 
} 
0
od -t d4 -v <filename> 
相關問題