Как преобразовать байты обратно в список целых чисел, когда он был упакован, используя 2 байта на int и «большой» порядок? - PullRequest
0 голосов
/ 06 октября 2018

Я использую преобразование списка целых чисел в байты с помощью функции to_bytes.Поскольку некоторые числа в моем списке больше 255 и могут стать довольно большими;Я произвольно решил хранить их, используя 3 байта.Итак, в моем цикле я делаю следующее: -

for number in original_array:
     byte_file_writer_delta.write(number.to_bytes(3, byteorder='big'))

Так, например, если в моем исходном массиве есть числа типа [1900, 1901].Когда я конвертирую его обратно, используя следующий код, я получаю что-то вроде [0, 7, 108, 0, 7, 109] в своем выводе. Я пытаюсь увидеть числа 1900 и 1901, когда я читаю их обратно из файла. Код, который я использую для считывания чисел:

byte_file_reader= open('byte_file_inverted_index.txt', 'rb')
byte_file_reader.seek(byte_offset)
mybytes=byte_file_reader.read(byte_size)
print(list(mybytes))

1 Ответ

0 голосов
/ 06 октября 2018

Посмотрите, может ли следующий скрипт чем-то вам помочь ... Я считаю, что функция bytes_to_int подойдет вам!

Я использовал несколько чисел для тестирования (original_array)

original_array = [1,2,3,4,5,6,7,10,1500,2999,50000,789456,9999999]

def bytes_to_int(bytes):
    result = 0
    for b in bytes:
        result = result * 256 + int(b)
    return result

for number in original_array:
    enc = number.to_bytes(3, byteorder='big')
    print(enc)
    dec = bytes_to_int(enc)
    print(dec)
...