Python 2 および Python 3 で Int をバイトに変換する方法

胡金庫 2023年1月30日
  1. Python 2.7 および 3 での int から bytes への変換の一般的な方法
  2. Python 3 のみ int から bytes 変換メソッド
  3. 性能比較
Python 2 および Python 3 で Int をバイトに変換する方法

int から bytes への変換は、最後の HowTo チュートリアルで紹介されている bytes から int への変換 の逆の操作です。この記事で紹介した int-to-bytes メソッドのほとんどは、bytes-to-int メソッドの逆のメソッドです。

Python 2.7 および 3 での int から bytes への変換の一般的な方法

Python struct モジュールのpack 関数を使用して、整数を特定の形式のバイトに変換できます。

>>> import struct
>>> struct.pack("B", 2)
'\x02'
>>> struct.pack(">H", 2)
'\x00\x02'
>>> struct.pack("<H", 2)
'\x02\x00'

struct.pack 関数の最初の引数は、バイト長、符号、バイト順(リトルエンディアンまたはビッグエンディアン)などのバイト形式を指定する形式文字列です。

Python 3 のみ int から bytes 変換メソッド

bytes を使用して intbytes に変換する

前回の記事で示したように、bytes は Python 3 の組み込みデータ型です。bytes を使って整数 0〜255 をバイトデータ型に簡単に変換できます。

>>> bytes([2])
b'\x02'
注意

整数は括弧で囲む必要があります。そうしないと、対応するバイト自体ではなく、整数バイトの位置を占める空きバイトになります。

>>> bytes(3)
b'\x00\x00\x00'

int.to_bytes() メソッドを使用して変換 intbytes に変換する

Python 3.1 から、新しい整数クラスメソッド int.to_bytes() が導入されました。これは、前回の記事で説明した int.from_bytes() の逆変換方法です。

>>> (258).to_bytes(2, byteorder="little")
b'\x02\x01'
>>> (258).to_bytes(2, byteorder="big")
b'\x01\x02'
>>> (258).to_bytes(4, byteorder="little", signed=True)
b'\x02\x01\x00\x00'
>>> (-258).to_bytes(4, byteorder="little", signed=True)
b'\xfe\xfe\xff\xff'

最初の引数は変換されたバイトデータ長であり、2 番目の引数 byteorder はバイトオーダーをリトルエンディアンまたはビッグエンディアンに定義し、オプションの引数 signed は 2 の補数を使用して整数を表すかどうかを決定します。

性能比較

Python 3 では、intbytes() に変換する 3つの方法があります。

  • bytes() 方法
  • struct.pack() 方法
  • int.to_bytes() 方法

各メソッドの実行時間を確認してパフォーマンスを比較し、最後にプログラムの速度を改善するための提案を行います。

>>> import timeint
>>> timeit.timeit('bytes([255])', number=1000000)
0.31296982169325455
>>> timeit.timeit('struct.pack("B", 255)', setup='import struct', number=1000000)
0.2640925447800839
>>> timeit.timeit('(255).to_bytes(1, byteorder="little")', number=1000000)
0.5622947660224895
変換方法 実行時間(100 万回)
bytes() 0.31296982169325455 秒
struct.pack() 0.2640925447800839 秒
int.to_bytes() 0.5622947660224895 秒

そのため、struct.pack() 関数を使用して int からバイトへの変換を実行し、Python 2 で既に導入されていますが、最高の実行パフォーマンスを取得してください。

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Python Bytes