我想从二进制文件中提取日期和时间,并在Perl中将其转换为ASCII。
如何将二进制数据转换为整数并转换为ASCII字符?
我已经尝试了下面的代码,但似乎我只能打印出前两个字节,然后我只看到下一次迭代的零。偶尔,我会得到其他值,但似乎我没有做正确的转换并缺少一些信息。
while (( $n = read FILE, $data, 4) != 0 ) {
my $hex = sprintf('%04X', ord($data))
}
是否必须进行某种转换为整数? 如何正确转换?
编辑:在十六进制转储中,我需要将04FF转换为整数。
答案 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;