2012-02-29 2 views
1

od -x test показывает:Как создать двоичный файл в Perl?

0000000 457f 464c 0102 0001

Теперь я хочу использовать Perl для создания такого файла.

open FH,'>','test_1'; 
#syswrite(FH,0x457f464c01020001); # not work 
print FH 0x457f464c01020001;  # not work 

Как создать двоичный файл в Perl?

+0

Для чего это стоит , ваш код «работает», но он не делает то, что вы хотите. Он преобразует шестнадцатеричное представление в его внутренний формат номера (возможно, потеряет кучу бит в преобразовании), а затем печатает десятичное представление числа. Подумайте об этом - вам вряд ли захочется «print 1;» напечатать ctrl-A. – tripleee

ответ

6

Чтобы создать двоичный файл, один использует

open (my $fh, '>:raw', $qfn) 

разместить

45 7f 46 4c 01 02 00 01 

в этом файле, можно использовать любое из следующих действий:

# Starting with a string of those bytes. 
print $fh "\x45\x7f\x46\x4c\x01\x02\x00\x01"; 

# Starting with a hex representation of the file. 
print $fh pack('H*', '457f464c01020001'); 

# Starting with the bytes. 
print $fh map chr, 0x45, 0x7f, 0x46, 0x4c, 0x01, 0x02, 0x00, 0x01; 

# Starting with the bytes. 
print $fh pack('C*', 0x45, 0x7f, 0x46, 0x4c, 0x01, 0x02, 0x00, 0x01); 
2
open(my $out, '>:raw', 'test_1.bin') or die "Unable to open: $!"; 
print $out pack('s<',255) ; 
close($out); 

также вы можете посмотреть на функции пакета PERL here

+0

Alternative установить файл в двоичном режиме: 'binmode (FH),' Это стоит понимание того, что 's' представляет собой (для OP): http://perldoc.perl.org/functions/pack.html – Paul

0

print FH "\x45\x7f\x46\x4c\x01\x02\x00\x01" другой путь. См. Quote and Quote-like Operators in perlop для получения дополнительной информации об escape-последовательностях, доступных в строках. \x работает как в C ... кроме того, что Perl имеет расширенный синтаксис, который выходит за пределы \xff.

Смежные вопросы