目次

Perlでバイナリファイルを作るサンプルコード

2010年11月19日 20時19分22秒

ファイル名書けって怒られた(´・ω・`)

ソース

s1.pl
## 4桁の16進数を読み込んでバイナリ形式で書き出すサンプル
 
binmode(STDOUT);
 
while(<STDIN>) {
  chomp($_);
  $code = uc( $_ );
  printf("%c%c", unpack("C", pack("H2", substr($code,0,2))),
                 unpack("C", pack("H2", substr($code,2,2))) );
}

標準入出力を使うことを想定した。

入力データ

input.txt
8140
8150
8160
8150
8147

いわゆるCP932(SJIS)の文字を5個並べた。

実行結果

D:\work>perl s1.pl < input.txt
  ̄~ ̄;
D:\work>

説明

標準出力をバイナリモードにするため binmode()でSTDOUTを指定した。 次に標準出力へ1バイトずつ書き出すために pack()で16進数文字列2桁を1バイトの数値に変換、それを unpack()で“文字”に変換する。あとは printf()の書式で %c を指定した。 ※2バイトのコードの上位・下位バイトを各々長さ1バイトの文字として編集した

旧ページコメント