Как сохранить произвольно длинный int в двоичном файле в python? - PullRequest
2 голосов
/ 15 апреля 2010

Как я могу сохранить и извлечь число 2 ** 10000 в двоичном файле в python, не преобразовывая его в строку? Может ли он быть сохранен как 10000 бит?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

Встроенный модуль pickle может сделать это, если вы передадите протокол версии 2 («новый двоичный протокол»):

import pickle
pickle.dumps(2**10000, 2)

Возвращает строку из 1259 байтов. Конечно, вы хотите записать его в файл как обычно, поэтому используйте pickle.dump(2**10000, file, 2)

2 голосов
/ 15 апреля 2010

Мне не ясно, спрашиваете ли вы в целом, как хранить большие целые числа в двоичном файле, или если число 2 ** 10000 является значимым. Если это важно, то использование более килобайта для хранения это, очевидно, очень расточительно (я могу написать это в 8 символов!)

Я приму общий случай, но для начала вам понадобится 10001 бит для хранения 2 ** 10000, а не 10000, поэтому возникает вопрос, что делать с дополнительными 7 битами, необходимыми для заполнения границы байта в файле. Я просто собираюсь хранить его в 10008 бит (1251 байт). В этом решении используется модуль bitstring .

from bitstring import BitArray
fout = open('bignumber', 'wb')
a = BitArray(uint=2**10000, length=10008)
a.tofile(fout)

и прочитать его обратно:

the_number = BitArray(filename='bignumber').uint

Это действительно просто сохраняет номер и ничего больше в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...