Python: 数値などをバイト配列に変換する方法
Python 2.5 より登場した struct モジュールを使うと便利。
詳細は以下を参照。
7.3. struct — 文字列データをパックされたバイナリデータとして解釈する — Python 2.7ja1 documentation
下記は全てリトルエンディアンのマシン下での実行例。
1 | >>> import struct |
- Int からバイト配列の変換
123456>>> struct.pack(
'i'
,
1
)
'\x01\x00\x00\x00'
>>> [struct.pack(
'i'
, x)
for
x
in
(
0
,
1
,
65
,
-
1
,
2000000000
)]
[
'\x00\x00\x00\x00'
,
'\x01\x00\x00\x00'
,
'A\x00\x00\x00'
,
'\xff\xff\xff\xff'
,
'\x00\x945w'
]
>>> [
len
(struct.pack(
'i'
, x))
for
x
in
(
0
,
1
,
65
,
-
1
,
2000000000
)]
[
4
,
4
,
4
,
4
,
4
]
- ビッグエンディアンで格納
1234>>> struct.pack(
'>i'
,
1
)
'\x00\x00\x00\x01'
>>> struct.pack(
'!i'
,
1
)
'\x00\x00\x00\x01'
- Int 以外の型のエンコード
1234>>> struct.pack(
'3?Q'
,
True
,
False
,
True
,
5L
)
'\x01\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00'
>>> struct.pack(
'dc10s'
,
0.025
,
'X'
,
'python'
)
'\x9a\x99\x99\x99\x99\x99\x99?Xpython\x00\x00\x00\x00'
- バイト配列から Int へのデコード
要素が一つでもタプルが返る。12>>> struct.unpack(
'i'
,
'\x01\x02\x03\x04'
)
(
67305985
,)
- Struct クラスを使う
フォーマット文字列がコンパイルされた状態で保持される。123>>> s
=
struct.Struct(
'i'
)
>>> s.pack(
1
)
'\x01\x00\x00\x00'
同じフォーマットを何度も使い回す場合に効率的。
0 件のコメント:
コメントを投稿