「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Pythonをゆっくりていねいに学ぶ(その20/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

7. プロのようにデータを操る

7.2 バイナリデータ

 ある操作を行うのに、テキストデータでは難しい一方でバイナリデータでは効率的な場合がある。そのため、エンディアン(コンピュータのプロセッサがデータをどのようにバイトに分割するか)や整数の符号ビットの概念を知るのが良い。

7.2.1 バイトとバイト列

 \mathrm{Python\ 3}0から255までの値を取る8ビット整数の2種類のシーケンスを導入した。

  • \mathrm{bytes}はイミュータブルで、バイトのタプルに近い
  • \mathrm{bytearray}はミュータブルで、バイトのリストに近い

##########################
### 数値をバイトにする ###
##########################

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によるバイナリデータの変換

 \mathrm{Python}にはバイナリデータのためのツールが少ない。\mathrm{C}\mathrm{C}++の構造体に似たデータを処理する\mathrm{struct}モジュールを用いることで、\mathrm{Python}のデータ構造との間でバイナリデータを相互変換できる。

 
指定子
バイト順
  トルエンディアン
  > ビッグエンディアン形式を表す
  • 書式指定指定子
 
指定子
説明
バイト数
  \mathrm{x} 1バイト読み飛ばし 1
  \mathrm{b} 符号付きバイト 1
  \mathrm{B} 符号なしバイト 1
  \mathrm{h} 符号付短正数 2
  \mathrm{H} 符号なし短正数 2
  \mathrm{i} 符号付き整数 4
  \mathrm{I} 符号なし整数 4
  \mathrm{l} 符号付き長整数 4
  \mathrm{L} 符号なし長整数 4
  \mathrm{Q} 符号なし長長整数 8
  \mathrm{f} 単精度浮動小数点数 4
  \mathrm{d} 倍精度浮動小数点数 8
  \mathrm{p} \mathrm{count}と文字シーケンス 1+\mathrm{count}
  \mathrm{s} 文字シーケンス \mathrm{count}

 型指定子は、エンディアン文字の後ろに置く。すべての指定子は前に数値を付けることができる。たとえば5\mathrm{B}\mathrm{BBBBB}と同じ意味になる。

7.1.2 その他のバイナリデータツール
  • \mathrm{bistring}
  • \mathrm{Construct}
  • \mathrm{hachoir}
  • \mathrm{binio}
7.1.3 binasciiによるバイト/文字列の変換

 標準モジュールである\mathrm{binascii}モジュールには、バイナリデータと様々な文字列表現を相互変換する関数が含まれている。16進数や\mathrm{base}64\mathrm{unencoded}などである。

7.2 ビット演算子

 
説明
  & \mathrm{AND}
  \mathrm{OR}
  \mathrm{\hat{}} 排他的\mathrm{OR}
  \tilde{ } ビット反転
  \mathrm{\lt\lt} 左シフト
  \mathrm{\gt\gt} 右シフト

*1:第2版が出ているものの初版しか持っていないのでこちらで。

プライバシーポリシー お問い合わせ