gpt4 book ai didi

Perl:一次读取一个字节的二进制文件

转载 作者:行者123 更新时间:2023-12-04 14:31:16 24 4
gpt4 key购买 nike

我正在编写一个工具,它需要一次读取一个二进制文件,处理每个字节,并可能根据处理的值采取一些行动。但出于某种原因,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

知道这里出了什么问题吗?

最佳答案

read返回字节作为字符 "\x50" ,不是数字 0x50 .更改 printf线到

printf "0x%04X\t0x%02X\n", $offset, ord $oneByte;

另一种选择是使用 unpack 'c', $oneByte .

关于Perl:一次读取一个字节的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13191462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com