gpt4 book ai didi

python - 在 Python 中将 'bytes' 对象分成 block

转载 作者:可可西里 更新时间:2023-11-01 02:43:15 25 4
gpt4 key购买 nike

我需要使用 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),在这种特殊情况下它等于 551 字节。

假设我要发送 40 字节长的包:这包含完整的 13 个包和 encoded_array 最后字节的剩余部分,总共 14 个包。但我无法弄清楚如何将 bytes 对象按字节数本身划分为更小的 bytes 对象。有谁知道如何做到这一点?

我也知道我可能以完全错误的方式做这件事,所以请告诉我如何通过 TCP 协议(protocol)发送“部分”数据。也许根本不需要进行这种拆分?

最佳答案

字节可能很棘手。

首先,encoded_array = str(int_array).encode() 并没有按照您的想法行事。如果打印 encoded_array,您会看到它实际上是将 int_array 的 to_string 值转换为字节。这就是为什么 encoded_array 的第一个值是 [

>>> encoded_array[:1]
b'['

其次,我不确定您是否希望 int_array = [i**2 for i in range(1, 100)] 执行它正在执行的操作。它创造的值(value)高达 10,000。如果每个元素代表一个字节,我不确定您是否希望这个范围在 0 到 256 之间。我假设您希望将一些数据转换为字节并拆分为 40 字节的 block ,并且在这种情况下数据是一个整数数组。

首先让我们将您的 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)

关于python - 在 Python 中将 'bytes' 对象分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48674992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com