从Perl中的文件中提取二进制数据

时间:2014-01-24 12:23:09

标签: perl hex decimal converter

我想从二进制文件中提取日期和时间,并在Perl中将其转换为ASCII。 hex dump

如何将二进制数据转换为整数并转换为ASCII字符?

我已经尝试了下面的代码,但似乎我只能打印出前两个字节,然后我只看到下一次迭代的零。偶尔,我会得到其他值,但似乎我没有做正确的转换并缺少一些信息。

 while (( $n = read FILE, $data, 4) != 0 ) {
     
  my $hex = sprintf('%04X', ord($data))
         

}

  

是否必须进行某种转换为整数? 如何正确转换?

编辑:在十六进制转储中,我需要将04FF转换为整数。

2 个答案:

答案 0 :(得分:2)

在glebaty的帮助下,我能够解决问题。这就是我将4个字节转换为十进制值的方式。

open FILE, "source.bin" or die $!;
while (( my $n = read $FILE, my $data, 4) != 0) {
  my $hex = unpack(  'H+', $data );
  my $decimal = hex($hex);
}
close FILE;

答案 1 :(得分:1)

ASCII是一个7位二进制整数,所以你需要从文件中读取1个字节。 试试这段代码:

open my $FILE, '<', 'file';                                                                                                                                   
while (( my $n = read $FILE, my $data, 1) != 0) {                                                                                                             
print chr(unpack('C', $data)). "\n";                                                                                                                  
}
close $FILE;