バイナリ ファイルを一度に 1 バイトずつ読み取り、各バイトを処理し、処理された値に応じて何らかのアクションを実行する必要があるツールを作成しています。しかし、何らかの理由で、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;
入力値 (データ ファイルの最初の 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
ここで何がうまくいかないのですか?