我需要通过'软件包发送数组'使用TCP Protocol
和Python的socket
模块的特定长度(例如40个字节)。
首先,我生成ints
的样本数组:
int_array = [i**2 for i in range(1, 100)]
然后我将其转换为bytes
对象:
encoded_array = str(int_array).encode()
使用encoded_array
来检查len(encoded_array)
对象的长度,encoded_array
在这种特殊情况下等于551字节。
说,我想发送40个字节长的包:这使得13个包长40个字节,剩下的是bytes
的最后一个字节,总共14个包。但我无法弄清楚如何将bytes
个对象划分为较小的TCP
个对象本身的字节数。任何人都知道如何做到这一点?
我也知道我可能会以完全错误的方式这样做,所以请告诉我如何发送'分配'数据通过unsigned long
协议,可能根本不需要进行此拆分。
答案 0 :(得分:0)
字节可能很棘手。
首先,encoded_array = str(int_array).encode()
并没有按照您的想法做。如果打印encode_array,您会发现它实际上是将int_array的to_string
值转换为字节。这就是为什么encode_array的第一个值为[
>>> encoded_array[:1]
b'['
第二,我不确定您是否要int_array = [i**2 for i in range(1, 100)]
做它正在做的事情。它最多可创建10,000个值。我不确定如果每个元素代表一个字节,您是否希望该范围在0到256之间。我假设您希望将一些数据转换为字节并分成40个字节的块,在这种情况下,数据是整数数组。
首先让我们将int_array转换为字节数组。我将每个int转换为2字节的值,并以十六进制表示。
>>> hex_array = [x.to_bytes(2, byteorder="big") for x in int_array]
现在将数据分成40个字节
>>> h
[]
>>> for x in range(0, int(round(len(hex_array)/20))):
... h.append(hex_array[:20])
... del hex_array[:20]
我要除以20,因为每个元素都包含2个字节
现在,您将有一个最多40个字节的集合数组。是时候将这些收藏加入到一起,让我们可以传播它们了!
>>> result
[]
>>> for package in h:
... joined_package = b';'.join(package)
... result.append(joined_package)