我找到的最短路:
n = 5
# Python 2.
s = str(n)
i = int(s)
# Python 3.
s = bytes(str(n), "ascii")
i = int(s)
Run Code Online (Sandbox Code Playgroud)
我特别关注两个因素:可读性和可移植性.对于Python 3,第二种方法很难看.但是,我认为它可能是向后兼容的.
我错过了一种更简洁,更清洁的方式吗?我目前使用一个新函数来创建一个lambda表达式来修复它,但也许这是不必要的.
And*_*den 36
你可以使用struct的包:
In [11]: struct.pack(">I", 1)
Out[11]: '\x00\x00\x00\x01'
Run Code Online (Sandbox Code Playgroud)
">"是字节顺序(big-endian),"I"是格式字符.因此,如果您想要做其他事情,您可以具体:
In [12]: struct.pack("<H", 1)
Out[12]: '\x01\x00'
In [13]: struct.pack("B", 1)
Out[13]: '\x01'
Run Code Online (Sandbox Code Playgroud)
这在python 2和python 3上都是一样的.
注意:逆操作(字节到int)可以通过解压缩来完成.
Mar*_*som 30
要在Python 2或Python 3中将字符串转换为字节序列,请使用字符串的encode方法.如果您不提供使用的编码参数'ascii',这对于数字数字总是足够好.
s = str(n).encode()
Run Code Online (Sandbox Code Playgroud)
在Python 2中str(n)已经产生了字节; 该encode会是一个双转换与此字符串隐式转换为Unicode,然后再返回到字节.这是不必要的工作,但它是无害的,并且与Python 3完全兼容.
10为b'10'使用上面的答案,但如果你想转换10为b'\x0a\x00\x00\x00'然后继续阅读.
该struct模块专门用于在各种类型之间进行转换,并将其二进制表示形式转换为字节序列.从类型到字节的转换完成struct.pack.有一个格式参数fmt,用于确定应执行的转换.对于4字节整数,可以是i有符号数或I无符号数.有关更多可能性,请参阅格式字符表,并在输出超过单个字节时查看选项的字节顺序,大小和对齐表.
ale*_*ich 14
我找到了唯一可靠,便携的方法
bytes(bytearray([n]))
Run Code Online (Sandbox Code Playgroud)
只有字节([n])在python 2中不起作用.通过bytearray采用风景路径似乎是唯一合理的解决方案.
Nad*_*adu 10
转换的INT到字节在Python 3:
n = 5
bytes( [n] )
>>> b'\x05'
Run Code Online (Sandbox Code Playgroud)
;)猜测这会比乱用字符串更好
来源:http://docs.python.org/3/library/stdtypes.html#binaryseq
小智 6
从int到byte:
bytes_string = int_v.to_bytes( lenth, endian )
Run Code Online (Sandbox Code Playgroud)
长度是1/2/3/4 ....,而尾数可以是“大”或“小”
将字节形成整数:
data_list = list( bytes );
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)