Является ли это безопасным способом преобразования массива из 8 8 битных целых чисел в 1 64 битное целое число

#python #binary #integer

#питон #двоичный #целое

Вопрос:

Я обрабатываю массивы из 8-битных целых чисел, которые выглядят следующим образом:

 ph0 = [[255, 0, 65, 165, 23, 32, 198, 43]]
 

Я хочу преобразовать массив в целое число таким образом, чтобы двоичное представление элементов в объединенном массиве соответствовало целому числу.

Таким образом, используя приведенный выше пример, его двоичное представление будет:

 ['0b11111111', '0b00000000', '0b01000001', '0b10100101', '0b00010111', '0b00100000', '0b11000110', '0b00101011']
 

В конце я хочу целое число, двоичное представление которого будет представлять собой все эти двоичные значения, объединенные вместе. Вот так:

 0b1111111100000000010000011010010100010111001000001100011000101011
 

Это то, что я придумал:

 def convertArrayToInt(hashArr):
    val = 0
    for i in range(len(hashArr[0])-1, -1, -1):
        val  = (hashArr[0][i])*2**((7-i)*8)
    return val
 

Я могу с уверенностью предположить, что каждый слот не превышает 255 (следовательно, не нужно беспокоиться о слоте, занимающем более 8 бит).

Безопасна ли моя реализация в использовании? Есть ли какие-нибудь идеи получше?

Ответ №1:

У вас есть список int объектов. Но это можно просто выполнить с помощью:

 int.from_bytes(bytes([255, 0, 65, 165, 23, 32, 198, 43]), 'big')