Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
前回
7. プロのようにデータを操る
7.2 バイナリデータ
ある操作を行うのに、テキストデータでは難しい一方でバイナリデータでは効率的な場合がある。そのため、エンディアン(コンピュータのプロセッサがデータをどのようにバイトに分割するか)や整数の符号ビットの概念を知るのが良い。
7.2.1 バイトとバイト列
はからまでの値を取るビット整数の2種類のシーケンスを導入した。
- はイミュータブルで、バイトのタプルに近い
- はミュータブルで、バイトのリストに近い
##########################
### 数値をバイトにする ###
##########################blist = [1, 2, 3, 255]
# bytes変数の導入
the_bytes = bytes(blist)
print(the_bytes)# bytesarray変数の導入
the_byte_array = bytearray(blist)
print(the_byte_array) # bytes値を表現するときにはbが先頭になる# bytes変数は書き換え不可
try:
the_bytes[1] = 127
except:
print('bytes変数は書き換えできません。')# bytesarray変数は書き換え可
the_byte_array = bytearray(blist)try:
the_byte_array[1] = 127
print(the_byte_array)
except:
print('bytesarray変数は書き換えできません。')# 0から255までバイナリ化可能
the_bytes = bytes(range(0, 256))
print(the_bytes)
7.1.1 structによるバイナリデータの変換
にはバイナリデータのためのツールが少ない。や++の構造体に似たデータを処理するモジュールを用いることで、のデータ構造との間でバイナリデータを相互変換できる。
- エンディアン指定子
指定子 |
バイト順 |
|
---|---|---|
リトルエンディアン | ||
> | ビッグエンディアン形式を表す |
- 書式指定指定子
指定子 |
説明 |
バイト数 |
|
---|---|---|---|
1バイト読み飛ばし | |||
符号付きバイト | |||
符号なしバイト | |||
符号付短正数 | |||
符号なし短正数 | |||
符号付き整数 | |||
符号なし整数 | |||
符号付き長整数 | |||
符号なし長整数 | |||
符号なし長長整数 | |||
単精度浮動小数点数 | |||
倍精度浮動小数点数 | |||
と文字シーケンス | |||
文字シーケンス |
型指定子は、エンディアン文字の後ろに置く。すべての指定子は前に数値を付けることができる。たとえばはと同じ意味になる。
7.1.2 その他のバイナリデータツール
7.1.3 binasciiによるバイト/文字列の変換
標準モジュールであるモジュールには、バイナリデータと様々な文字列表現を相互変換する関数が含まれている。16進数や、などである。
*1:第2版が出ているものの初版しか持っていないのでこちらで。