40

私が見つけた最短の方法は次のとおりです。

n = 5

# Python 2.
s = str(n)
i = int(s)

# Python 3.
s = bytes(str(n), "ascii")
i = int(s)

私は特に、読みやすさと移植性という 2 つの要素に関心があります。Python 3 用の 2 番目の方法は醜いです。ただし、下位互換性がある可能性があると思います。

私が見逃した、より短くてきれいな方法はありますか?私は現在ラムダ式を作成して新しい関数で修正していますが、それは不要かもしれません。

4

6 に答える 6

42

答え 1:

Python 2 または Python 3 で文字列を一連のバイトに変換するには、文字列のencodeメソッドを使用します。エンコーディング パラメータを指定しない場合は'ascii'、常に数字には十分な値が使用されます。

s = str(n).encode()

Python 2 ではstr(n)、すでにバイトが生成されます。encodeこの文字列は暗黙的に Unicode に変換され、再びバイトに戻されるため、二重変換が行われます。不要な作業ですが、害はなく、Python 3 と完全に互換性があります。


答え 2:

上記は、人間が読める形式で ASCII バイトの文字列を生成するという、実際に尋ねられた質問に対する回答です。しかし、人々は別の質問への答えを得ようとしてここに来続けているので、私はその質問にも答えます. 上記の回答10を使用するように変換したいが、変換したい場合は読み続けてください。b'10'10b'\x0a\x00\x00\x00'

このstructモジュールは、さまざまな型とそれらのバイナリ表現を一連のバイトとして変換するために特別に提供されました。タイプからバイトへの変換は で行われstruct.packます。fmtどの変換を実行するかを決定する format パラメータがあります。4 バイト整数の場合、それは符号付きi数値またはI符号なし数値用です。その他の可能性については、フォーマット文字テーブルを参照してください。また、出力が 1 バイトを超える場合のオプションについては、バイト オーダー、サイズ、アライメント テーブルを参照してください。

import struct
s = struct.pack('<i', 5) # b'\x05\x00\x00\x00'
于 2012-12-26T18:13:19.127 に答える
10

Python 3でintbyteに変換する:

    n = 5    
    bytes( [n] )

>>> b'\x05'

;) 文字列をいじるよりはましだと思います

ソース: http://docs.python.org/3/library/stdtypes.html#binaryseq

于 2014-02-27T16:26:07.040 に答える
6

Python 3.x では、整数値 (他の回答では許可されていない大きな値を含む) を次のような一連のバイトに変換できます。

import math

x = 0x1234
number_of_bytes = int(math.ceil(x.bit_length() / 8))

x_bytes = x.to_bytes(number_of_bytes, byteorder='big')

x_int = int.from_bytes(x_bytes, byteorder='big')
x == x_int
于 2018-07-20T16:29:24.320 に答える