2013-02-04 45 views
1

好吧其實我已經把一些精力放在試圖做到這一點,這時候:)Perl的 - 從某個偏移量十六進制提取數據

我有這樣的代碼:

#! /usr/bin/perl 

open(my $fin, '<', "./file1.bin") or die "Cannot open file1.bin: $!"; 
binmode($fin); 
open(my $fout, '>>', "./file2.bin") or die "Cannot create file2.bin: $!"; 
binmode($fout); 


seek($fin,0x760, SEEK_CUR); 
read($fin, 0x400,) 
print ("$fin, $fout); 
close($fout); 

我不知道,如果你可以看到我想要做什麼,但我試圖尋求抵消0x760 ,然後從偏移量0x760讀取,然後從file1.bin中讀取一大塊字節(0x400),並將該字節塊打印到file2.bin

所以我想這是我想要做的流程:

open file1.bin for reading in binmode 
open file2.bin for writing in binmode 
seek to offset 0x760 in file1.bin 
read a chunk of data (0x400) from file1.bin 
write the chunk of data (0x400) to file2.bin 

希望你明白我要完成的:)任何輸入將是教育:)

回答

1

。在你的代碼一個錯字:

print ("$fin, $fout); 

應改爲(開bindmode後)

my $buffer = ''; 
sysseek $fin, 0x760, SEEK_SET; 
sysread $fin, $buffer, 0x400; 
syswrite $fout, $buffer; 
close $fin; 
close $fout; 
+0

謝謝你,這讓我的頭腦燃燒起來,現在我已經讀了兩天了,而我的OP是我最好的破解版,大聲笑 – james28909

1

你忘了啓用警告(這將告訴你「SEEK_CUR」被解釋爲一個字符串因爲你沒有導入常量)。

閱讀文檔以供閱讀;您需要爲讀取的數據提供一個變量。

也閱讀打印;其語法是print FILEHANDLE LIST; (其中FILEHANDLE是$ fout,LIST是你讀入的變量)。

+0

好的,我會閱讀了關於那肯定讀了一些,它只是用所有的信息,即時通訊新的,它可以容易得到miscontrued大聲笑。 – james28909