BlankTar

about | blog | works | photo

バイト列を整数にする、あるいは整数をバイト列にする。
通信とか暗号とか扱ってるとしょっちゅうやらなきゃいけない事なわけですが、pythonだと意外と面倒なのよね、これが。
C言語ならキャストしちゃえば一発なんだけどねー。

・・・なんて思っていました。ついさっきまで。
せめて楽な方法が無いかと探していたら、python3のドキュメントの中に整数を表すバイト列を返します。なんて記述を発見。
なんてこった、標準であるのかよ。

使い方はこんな感じ
>>> a = 128
>>> a.to_bytes(2, 'big')  # 2バイトでビッグエンディアン
b'\x00\x80'
>>> a.to_bytes(4, 'little')  # 4バイトでリトルエンディアン
b'\x80\x00\x00\x00'
うわぁすごい簡単だどうしよう。

int->bytesが出来るのだからもちろんbytes->intも出来て、
>>> int.from_bytes(b'\x00\x80', 'big')
128
>>> int.from_bytes(b'\x80\x00\x00\x00', 'little')
128
こんな感じ。

python3.2以降でしか使えないらしいので要注意です。
いやしかし便利だなこれ、素敵だ。

参考: 4. 組み込み型 — Python 3.3.5 ドキュメント
< gentooでジャンボフレームを使ってみる OpenSSLのBIGNUM関連の関数群に関するメモ >