2012-02-29 16 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

をあなたのコードは "仕事"をしますが、あなたが望むことはしません。これは、16進表記を内部数値書式に変換し(おそらく変換のビットを失う)、その数値の10進表示を出力します。それについて考えてみましょう。あなたは 'print 1;'を使い、ctrl-Aを印刷することはほとんどありません。 – tripleee

答えて

6

、1がそのファイルに

45 7f 46 4c 01 02 00 01 

を配置するには、1次のいずれかを使用することができます

open (my $fh, '>:raw', $qfn) 
を使用しています:それは価値がある何のため

# 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

代替がバイナリモードにファイルを設定するには: 'のbinmode(FH);' それは理解する価値があるのは、 '(OPのために)何を表すか: http://perldoc.perl.org/functions/pack.html – Paul

1
 
print FH pack 'H*', '457f464c01020001' 
0

print FH "\x45\x7f\x46\x4c\x01\x02\x00\x01"を見ることができるが、別の方法です。文字列で使用できるエスケープシーケンスの詳細については、Quote and Quote-like Operators in perlopを参照してください。 \xはC言語と同じように動作しますが、Perlには\xffを超える拡張構文があります。バイナリファイルを作成するには

関連する問題