我在perl中解释二进制文件中的字节时遇到了问题。
代码片段:
open IMG_FH, $IMAGE_FILE or die $!;
binmode IMG_FH;
sysread(IMG_FH, $Var_Options, 2);
if ($Var_Options == 0)
{
print "Received 0\n";
}
elsif ($Var_Options == 28)
{
print "Received 0\n";
}
else
{
print "Error\n";
}
即使我确信二进制文件开头的单词是:" 001c" (十六进制),我结束打印"错误&#34 ;;
请帮忙。
答案 0 :(得分:1)
如果您正在分析二进制数据,那么您使用了错误的工具。
您需要学习pack
,unpack
和perlpacktut,而不是进行简单的数字相等测试。
一个非常有用的工具是使用Data::Dump
或核心库Data::Dumper
。
我会将您的脚本重写为以下内容以检查前两个字节:
use strict;
use warnings;
use autodie;
my $file = 'test-all-the-things.jpg';
open my $fh, '<:raw', $file;
sysread $fh, my $data, 2;
use Data::Dump;
dd $data;
输出:
"\xFF\xD8"
当试图分析超过2个字节时,该模块会调整输出:
sysread $fh, my $data, 20;
use Data::Dump;
dd $data;
输出:
pack("H*","ffd8ffe000104a46494600010101006000600000")