Python:如何按位将 4 位数字的数组转换为更大的数字?

Python: How to convert array of 4 digits to a larger number, bitwise?

假设我有

array = [1,2,3,4]

我想要的是NOT转换为数字1234;但是要取 1、2、3 和 4 的位,将它们连接起来并转换回数字。

换句话说,我可能不得不将每个 number/digit 转换为二进制,将它们连接起来,然后再转换回数字。

因此,1,2,3,4 将分别为 00000001000000100000001100000100。连接它们将导致 00000001000000100000001100000100 转换为无符号整数将是 16909060

请记住,数组中的数字来自 ord(characters),因此它们的长度应为 8 位,因此连接后应产生 32 位数字

我该怎么做?

如有必要,在 Python 中操作字节数组的常用方法是使用 struct module. Beware of the byte order

Python 3

>>> import struct
>>> i, = struct.unpack("<i", bytes([1, 2, 3, 4]))
>>> i
67305985
>>> 

Python 2 & 3

>>> import struct
>>> i, = struct.unpack("<i", struct.pack("4B", *[1, 2, 3, 4]))
>>> i
67305985
>>> 
sum([v << i * 8 for i, v in enumerate(reversed(array))])

在这个简单的例子中,也许这就足够了:

result = array[0] << 24 | array[1] << 16 | array[2] << 8 | array[3]

例如:

array = [1, 2, 3, 4]
result = array[0] << 24 | array[1] << 16 | array[2] << 8 | array[3]
print result

打印这个:

16909060
array = [1,2,3,4]
new = []
for number in array:
    bits = bin(number).split('b')[1]
    #transform your number into a binary number (like 0b001), transforms that binary into an array split at b, so [0, 001] and takes the second number of that.
    while len(bits) < 8:
        bits = '0' + bits
        #turns the newly created binary number into an 8 number one
    new.append(bits)
output = '0b'
for item in new:
    output += item
    #puts all the binary's together to form a new, 32 bit binary
output = int(output, 2)
#turns the binary string an integer

为此使用字符串可能不是最干净的方法,但它确实有效。

如果你喜欢一条线

>>> int("".join([bin(x)[2:].zfill(8) for x in a]),2)
16909060

还是按部就班

第一步.将数字转换为二进制字符串,excape 0bs

>>> a  = [1,2,3,4]
>>> b = [bin(x)[2:] for x in a]
>>> b
['1', '10', '11', '100']

步骤 2. 用零填充元素 (zfill)

>>> c = [i.zfill(8) for i in b]
>>> c
['00000001', '00000010', '00000011', '00000100']

第 3 步。连接元素以创建新字符串

>>> d = "".join(c)
>>> d
'00000001000000100000001100000100'

第四步.转换为10基数

>>> int(d,2)
16909060