Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:一次读取一个字节的二进制文件_Perl_File_Input_Binary_Byte - Fatal编程技术网

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

Perl:一次读取一个字节的二进制文件,perl,file,input,binary,byte,Perl,File,Input,Binary,Byte,我正在编写一个工具,它需要一次读取一个二进制文件一个字节,处理每个字节,并根据处理后的值可能采取一些措施。但由于某些原因,Perl获取的值与文件中的数据不同。我使用的代码与此类似(为简洁起见,将其精简,但这仍然存在问题): 知道这里出了什么问题吗?read将字节返回为char“\x50”,而不是数字0x50。将printf行更改为 printf "0x%04X\t0x%02X\n", $offset, ord $oneByte; 另一个选项是使用解包'c',$oneByte似乎字节被解释为AS

我正在编写一个工具,它需要一次读取一个二进制文件一个字节,处理每个字节,并根据处理后的值可能采取一些措施。但由于某些原因,Perl获取的值与文件中的数据不同。我使用的代码与此类似(为简洁起见,将其精简,但这仍然存在问题):


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

read
将字节返回为char
“\x50”
,而不是数字
0x50
。将
printf
行更改为

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

另一个选项是使用
解包'c',$oneByte

似乎字节被解释为ASCII字符(
0x35='5'=>5
),您在哪个平台上?Windows或非Windows(Unix ish)可能是显著差异。我不确定这是否真的重要,但也可以涵盖基本原则;使用警告!!!这会立即指出问题所在。谢谢!这就成功了。如果我想将字节写回文件,我需要使用chr()吗?@DarkMorford:是,或者
pack
用于
unpack
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
printf "0x%04X\t0x%02X\n", $offset, ord $oneByte;