0

Python 3で任意の長さ(正)の整数をバイトオブジェクトに変換するにはどうすればよいですか? 基本的に base 256 エンコーディングになるように、最上位バイトが最初にある必要があります。

固定長の値 (unsigned long long まで) の場合は、struct モジュールを使用できますが、Python で大きな数値の変換をサポートするライブラリはないようです。

予想された結果:

>>> intToBytes(5)
b'\x05'
>>> intToBytes(256)
b'\x01\x00'
>>> intToBytes(6444498374093663777)
b'You won!'
4

1 に答える 1

2

結果に先行ゼロバイトがない:

def intToBytes(num):
    if num == 0:
        return b""
    else:
        return intToBytes(num//256) + bytes([num%256])

またはワンライナーとして

intToBytes = lambda x: b"" if x==0 else intToBytes(x//256) + bytes([x%256])

定数バイトオブジェクトを連続して連結することは、それほど効率的ではありませんが、コードが短くなり、読みやすくなります。

あなたが使用できる代替手段として

intToBytes = lambda x: binascii.unhexlify(hex(x)[2:])

binasciiただし、依存関係があります。

固定長の結果 (必要に応じて先行ゼロ付き):

Python 3.2 以降では、リトルエンディアンのバイト順もサポートするint.to_bytesを使用できます。

于 2013-05-05T22:23:20.067 に答える