如何在不将整数转换为字符串的情况下克服这个问题?
你不能。或者更准确地说,您需要将其转换为bytes
或str
以某种方式,但它不必是像b'34'
/这样的人类可读的文本形式'34'
。Python 3 的一种常见方法是:
my_int = 34 # Or some other value
my_int_as_bytes = my_int.to_bytes((my_int.bit_length() + 7) // 8, 'little')
这使得原始字节的极简表示int
(无论长度如何);for 34
,你会得到b'"'
(因为它只需要一个字节来存储它,所以你基本上得到了一个bytes
带有序数值的对象),但是对于更大int
的 s 它仍然有效(不像胡乱使用chr
),而且它总是一样小尽可能(每字节获取 8 位数据,而不是像转换为文本字符串那样每字节超过 3 位)。
如果您使用的是 Python 2(为什么?!?它已经停产将近一年),int.to_bytes
不存在,但您可以通过各种方式以中等效率伪造它,例如(仅处理非负值,与to_bytes
使用简单标志处理有符号值不同):
from binascii import unhexlify
my_int_as_bytes = unhexlify('%x' % (my_int,))