从位字符串到字节对象的Pythonic转换(3.6.7)

时间:2019-11-13 18:40:22

标签: python python-3.x sockets integer integer-overflow

将大的位文字字符串转换为可以通过套接字发送的“字节”对象的pythonic方法是什么?

data=b'1010010110100101'

sock.sendto(bytes(int(data[i : i + 8], 2) for i in range(0, len(data), 8)), (IP, PORT))

该方法当前溢出了40多个字节的数据,但是需要处理更长的块(〜1200字节)。 (大概是在 int 强制转换中)。

我尝试了其他几种方法,但请保持不足。

尝试将以上给出的data转换为int,然后转换为bytes时,一切正常:

>>> data=b'1010010110100101'
>>> len(data)
16
>>> type(data)
<class 'bytes'>
>>> bytes(int(data[0:8],2))
b'\x00\x00\x00\x00\x00\x00\x00\...
...0\x00\x00'

可以使用更长的数据重现该问题。例如,以下内容在投射到MemoryError时会提高int

>>> data2=b'10100101101001011010101010101010101010101010101010101010'
>>> len(data2)
56
>>> bytes(int(data2[:],2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
>>> int(data2[:],2)
46625523583593130

尝试将OverflowError打包成最大的data2大小(int)时,也可能获得ValueError: int() base must be >= 2 and <= 36

>>> bytes(int(data2[:],36))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: cannot fit 'int' into an index-sized integer

0 个答案:

没有答案