perl中的二进制文件数据解释

时间:2014-09-25 04:17:15

标签: perl binary

我在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 ;;

请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您正在分析二进制数据,那么您使用了错误的工具。

您需要学习packunpackperlpacktut,而不是进行简单的数字相等测试。

一个非常有用的工具是使用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")