Dar*_*ord 6 binary perl byte file input
我正在编写一个工具,需要一次读取一个字节的二进制文件,处理每个字节,并根据处理的值可能采取一些操作.但由于某种原因,Perl获取的值与文件中的数据不同.我正在使用类似于此的代码(为了简洁而剥离,但这仍然存在问题):
#!/usr/bin/perl
use strict;
my $bytesToProcess = 16;
my $fileName = 'datafile.bin';
print "Processing $bytesToProcess bytes...\n";
open FILE, "<:raw", $fileName or die "Couldn't open $fileName!";
for my $offset (0 .. $bytesToProcess - 1)
{
my $oneByte;
read(FILE, $oneByte, 1) or die "Error reading $fileName!";
printf "0x%04X\t0x%02X\n", $offset, $oneByte;
}
close FILE;
Run Code Online (Sandbox Code Playgroud)
输入值(数据文件的前16个字节): 50 53 4D 46 30 30 31 35 00 00 70 00 07 3F 10 00
输出:
Processing 16 bytes...
0x0000 0x00
0x0001 0x00
0x0002 0x00
0x0003 0x00
0x0004 0x00
0x0005 0x00
0x0006 0x01
0x0007 0x05
0x0008 0x00
0x0009 0x00
0x000A 0x00
0x000B 0x00
0x000C 0x00
0x000D 0x00
0x000E 0x00
0x000F 0x00
Run Code Online (Sandbox Code Playgroud)
知道这里出了什么问题吗?
read将字节作为char返回"\x50",而不是数字0x50.将printf行更改为
printf "0x%04X\t0x%02X\n", $offset, ord $oneByte;
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用unpack 'c', $oneByte.
| 归档时间: |
|
| 查看次数: |
12290 次 |
| 最近记录: |