如何连接来自 3 个小整数的字节以生成由 Python 中的那些字节表示的更大数字?
How to concatenate bytes from 3 small ints to make a larger number that is represented by those bytes in Python?
我有 3 个小整数(小于 255),因此可以用一个字节表示。
我想从那个 3 字节序列创建一个更大的 int。
例如,如果这 3 个整数是 1、2 和 3,我会:
00000001
、00000010
和 00000011
然后我想得到对应的整数:
000000010000001000000011
,用计算器换算成小数就是整数66051。
如何从 3 个小整数到 Python 中的最后一个更大的整数?
位移运算符?
对于您的示例 (1 << 16) + (2 << 8) + 3
给出 66051。
您可以对整数使用位移运算符:
a = 0b01
b = 0b10
c = 0b11
d = (a << 16) + (b << 8) + c
print(f"{d:b}")
10000001000000011
您可以在添加另一个元素之前反复左移 运行 个总数:
>>> (((1 << 8) + 2) << 8) + 3
66051
这种迭代操作可以推广到任意数量的整数,使用functools.reduce
:
>>> from itertools import reduce
>>> reduce(lambda acc, x: (acc << 8) + x, [1,2,3]
66051
您还可以使用 struct
模块将三个 8 位值打包成一个 bytes
值:
>>> import struct
>>> struct.pack('BBB", 1, 2, 3)
b'\x01\x02\x03'
您可以使用
将其转换为 int
值
>>> int.from_bytes(b'\x01\x02\x03', 'big')
66051
我有 3 个小整数(小于 255),因此可以用一个字节表示。
我想从那个 3 字节序列创建一个更大的 int。
例如,如果这 3 个整数是 1、2 和 3,我会:
00000001
、00000010
和 00000011
然后我想得到对应的整数:
000000010000001000000011
,用计算器换算成小数就是整数66051。
如何从 3 个小整数到 Python 中的最后一个更大的整数?
位移运算符?
对于您的示例 (1 << 16) + (2 << 8) + 3
给出 66051。
您可以对整数使用位移运算符:
a = 0b01
b = 0b10
c = 0b11
d = (a << 16) + (b << 8) + c
print(f"{d:b}")
10000001000000011
您可以在添加另一个元素之前反复左移 运行 个总数:
>>> (((1 << 8) + 2) << 8) + 3
66051
这种迭代操作可以推广到任意数量的整数,使用functools.reduce
:
>>> from itertools import reduce
>>> reduce(lambda acc, x: (acc << 8) + x, [1,2,3]
66051
您还可以使用 struct
模块将三个 8 位值打包成一个 bytes
值:
>>> import struct
>>> struct.pack('BBB", 1, 2, 3)
b'\x01\x02\x03'
您可以使用
将其转换为int
值
>>> int.from_bytes(b'\x01\x02\x03', 'big')
66051