Попытка сделать двоичное преобразование в шестнадцатеричный файл. Я могу вывести шестнадцатеричный код, но, тем не менее, когда я пытаюсь вывести результат в файл, переменная возвращает строку «82». Я не могу понять почему; как и все вещи, скорее всего, что-то простое.
#!/usr/bin/perl -w
use strict;
my $blockSize = 1024;
my $fileName = $ARGV[0];
my $hexName = $ARGV[1];
open(F,"<$fileName") or die("Unable to open file $fileName, $!");
binmode(F);
my $buf;
my $ct=0;
while(read(F,$buf,$blockSize,$ct*$blockSize)){
foreach(split(//, $buf)){
printf unpack ("H*", $_); #prints the hex stream to terminal just fine
open(H,">$hexName") or die("Unable to open file $fname, $!");
binmode (H);
printf H unpack ("H*", $_);
close (H);
}
print "\n";
$ct++;
}
close(F);
выход
perl rawrHexFile.pl test.png file.hex
89504e470d0a1a0a0000000....
mookie @ temple: / srv / bench% cat file.hex
82
cat file.hex
82
Спасибо.
Вот мой последний код, который работает. в случае
use strict;
my $fileName = $ARGV[0];
my $hexName = $ARGV[1];
my $hexCodeFile = $ARGV[2];
my $hexDecodeFile = $ARGV[3];
my $blockSize = -s $fileName;
my $buf;
open(F,"<$fileName") or die("Unable to open file $fileName, $!");
binmode(F);
open(H,">$hexName") or die("Unable to open file $hexName, $!");
read(F,$buf,$blockSize);
print H unpack ("H*", $buf);
close (H);
close(F);