強火で進め

このブログではプログラム関連の記事を中心に書いてます。

バイナリデータの出力処理

いまどきバイナリデータを加工するような人は画像処理や圧縮、暗号などを扱ってる様な人しか居ないかも知れませんがちょっと必要が有って調べたので書いときます。

Pythonでバイナリデータを加工するときは pack() 、 unpack() 関数を使用します。

公式のドキュメント
http://www.python.jp/doc/release/lib/module-struct.html
http://docs.python.jp/2.4/lib/module-struct.html

まずは pack() 関数の解説をします。

1バイトのデータを出力する

1バイト、ファイル出力する場合はこのように書きます。

from struct import *

f = open('test.dat', 'wb')
f.write(pack('B', 0x01))
f.close()

ファイルの内容をバイナリエディタで見た場合、このようになります。

01

2バイトのデータを出力する

同様に2バイト、ファイル出力する場合はこのように書きます。

from struct import *

f = open('test.dat', 'wb')
f.write(pack('<H', 0x0102))
f.close()

<H の < は エンディアン を表し、以下のような対応関係があります。

CPUの種類 エンディア 使用する文字
インテル トルエンディアン
モトローラ ビックエンディアン >

今回はリトルエンディアンを指定したのでファイル内のデータはこうなります。

02 01

4バイトのデータを出力する

同様に4バイト、ファイル出力する場合はこのように書きます。

from struct import *

f = open('test.dat', 'wb')
f.write(pack('<L', 0x01020304))
f.close()
04 03 02 01

指定する文字についてまとめると以下のようになります。

指定する文字 意味
B 1バイト
H 2バイト
L 4バイト
トルエンディアン
> ビックエンディアン