如何连接来自 3 个小整数的字节以生成更大的数字,该数字由 Python 中的这些字节表示?

Edy*_*rne 2 python python-3.8

我有 3 个小整数(小于 255),因此可以用一个字节表示。

我想从那个 3 个字节的序列中创建一个更大的 int。

例如,如果这 3 个整数分别为 1、2 和 3,我将有:

000000010000001000000011

然后我想得到对应于的 int:

000000010000001000000011,根据计算器,当转换为小数时,它将是整数 66051。

我怎样才能在 Python 中从 3 个小整数变成最后一个更大的整数?

sza*_*kus 5

位移运算符?

对于您的示例,(1 << 16) + (2 << 8) + 3给出 66051。


che*_*ner 5

您可以在添加另一个元素之前重复左移运行总计:

>>> (((1 << 8) + 2) << 8) + 3
66051
Run Code Online (Sandbox Code Playgroud)

这种迭代操作可以推广到任意数量的整数,使用functools.reduce

>>> from itertools import reduce
>>> reduce(lambda acc, x: (acc << 8) + x, [1,2,3]
66051
Run Code Online (Sandbox Code Playgroud)

您还可以使用该struct模块将三个 8 位值打包为单个bytes值:

>>> import struct
>>> struct.pack('BBB", 1, 2, 3)
b'\x01\x02\x03'
Run Code Online (Sandbox Code Playgroud)

您可以将其转换为一个int

>>> int.from_bytes(b'\x01\x02\x03', 'big')
66051
Run Code Online (Sandbox Code Playgroud)