Как вы обрабатываете чрезвычайно большие значения в Python? - PullRequest
0 голосов
/ 03 января 2011

Как заставить Python работать со значениями порядка 1099511627776 бит (да, 137 Гб)?Мне кое-что нужно для реализации этого (или, если вы можете предложить лучший способ сделать это, буду менять методы).очевидно, у новых типов длины в pgp есть 3 раздела вместо 2. Теперь они следующие: тип длины, значение типа длины и длина.тип длины - 2 бита, что означает 191 байт, 8383 байта, 4294967296 байт или частичную длину.длина затем кодируется в байтах.Как я могу проверить, если значение меньше 4294967296 байт, если я не могу даже сделать 1 << (4294967296 << 8)?он слишком большой, чтобы поместиться даже в длинную.

Ответы [ 4 ]

2 голосов
/ 04 января 2011

Это не только большой, чтобы поместиться в длинный, он слишком большой, чтобы поместиться в памяти любого компьютера.Я думаю, вы что-то неправильно поняли.

Насколько я понимаю, наибольшее значение ключа составляет 4 294 967 295 байт.Это 4 ГБ, а не 137 ГБ.Вы держите этот ключ в памяти не как одно число, а как строку байтов.Так что я не знаю, откуда вы взяли число размером 137 ГБ.

Если бы PGP требовало этого, это было бы невозможно реализовать.Поскольку есть реализации, я уверен, что это не так, как это делается.

(Кроме того, я уверен, что есть модули PGP для Python, но если вы делаете это не потому, что вам это нужно, атренируйся, и потому что ты хочешь учиться, продолжай в том же духе!)

1 голос
/ 03 января 2011

Используйте большую библиотеку чисел, такую ​​как GMPY .

1 голос
/ 03 января 2011

С формой с тремя аргументами pow().

0 голосов
/ 04 января 2011

Я интерпретирую RFC4880 (ноябрь 2007 г.) по-разному. В разделе 3.2 описаны целые числа с множественной точностью, имеющие длину 2 октета, поэтому наибольший размер будет равен 64 КБ. Раздел 4.2.2 описывает новый формат пакета и номера документов шкалы, которую вы описываете. Но формат пакета отличается от целочисленного формата с множественной точностью. Если вы толкуете это по-другому, обновите ваш вопрос, указав точные разделы RFC, которые вы читаете.

...