Python 2,3干净地将整数转换为“字节”
我发现的最短方法是:
n = 5
# Python 2.
s = str(n)
i = int(s)
# Python 3.
s = bytes(str(n), "ascii")
i = int(s)
我特别关注两个因素:可读性和可移植性。对于Python 3,第二种方法很难看。但是,我认为它可能是向后兼容的。
我错过了一种更短,更干净的方式吗?我目前使用一个lambda表达式来使用新功能对其进行修复,但这也许是不必要的。
-
答1:
要将字符串转换为Python 2或Python
3中的字节序列,请使用字符串的encode
方法。如果您不提供编码参数'ascii'
,则该参数对于数字总是足够的。s = str(n).encode()
- Python 2:http://ideone.com/Y05zVY
- Python 3:http://ideone.com/XqFyOj
在Python
2中str(n)
已经产生了字节;该encode
会是一个双转换与此字符串隐式转换为Unicode,然后再返回到字节。这是不必要的工作,但它无害且与Python
3完全兼容。
答案2:
上面是对实际提出的问题的答案,该问题是生成人类可读形式的ASCII字节字符串。但是由于人们不断来这里试图获得 另一个
问题的答案,所以我也会回答这个问题。如果您想转换10
以b'10'
使用上面的答案,但是如果您想转换10
以b'\x0a\x00\x00\x00'
继续阅读。该
struct
模块专门用于在各种类型及其二进制表示形式(字节序列)之间进行转换。从类型到字节的转换是通过完成的struct.pack
。有一个format参数fmt
确定应执行的转换。对于4字节整数,它将i
用于有符号数或I
无符号数。有关更多可能性,请参见格式字符表,如果输出大于单个字节,请参见字节顺序,大小和对齐表以获取选项。import struct s = struct.pack('<i', 5) # b'\x05\x00\x00\x00'