2014-09-25 192 views
0

我在解釋perl中二進制文件的字節時遇到了問題。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」(十六進制),我結束了打印「錯誤」;

請幫忙。

回答

1

如果您正在分析二進制數據,那麼您正在使用錯誤的工具。

而不是做一個簡單的數字相等性測試,您需要研究pack,unpackperlpacktut

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