我通常是读者,但这次我找不到答案。我有一些由科学设备生成的技术文件。有时,记录的文件会损坏,我们必须手动进行一些十六进制修改。我想知道如何实现自动化。我正在考虑 Perl,因为我对此有所了解,但即使我设法读取了感兴趣的偏移量,我也不知道如何编写新值。
我有两件事要做:
- 在偏移量 4 处写入文件大小减 8
- 计算“TRCKfmt”模式的数量,即 5452434B666D74(十六进制),然后在偏移量 5C(92)处记下十六进制值。
我尝试在文件句柄上使用sysread
和syswrite
,但我无法完成不同的步骤。
也许Perl不是一个好的选择,我不知道如何解决。
这是我的实际脚本:
use warnings;
use strict;
use diagnostics;
use Fcntl qw(:seek);
my($fh, $filename, $byte_position, $byte_value);
$filename = "MYFILE.tac";
$byte_position = 4;
my $filesize = -s $filename;
print "Size: $filesize\n";
open($fh, "<", $filename)
|| die "can't open $filename: $!";
binmode($fh)
|| die "can't binmode $filename";
sysseek($fh, $byte_position, SEEK_CUR) # NB: 0-based
|| die "couldn't see to byte $byte_position in $filename: $!";
sysread($fh, $byte_value, 1) == 1
|| die "couldn't read byte from $filename: $!";
printf "read byte with ordinal value %#02x at position %d\n",
ord($byte_value), $byte_position;
感谢您的任何帮助。