strtoull для строк произвольной длины в C ++ - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть программа, которая принимает строку, представляющую число длиной до 256 бит, которое мне нужно расширить до 512 бит. Строка представляет число в шестнадцатеричном формате.

Как это работает, у меня есть функции для преобразования строк в 64-битные, 128-битные или 256-битные числа, где 128-битная функция дважды вызывает 64-битную функцию, 256-битная функция вызывает 128-битный один дважды, а 64-битный использует либо strotull, либо вручную преобразует строку.

Значения, превышающие 64 бита, хранятся в массиве 64-битных записей.

Это уродливо, трудно понять и подвержено ошибкам, и я хочу выбросить все это. Учитывая, что strtoull уже хорошо обрабатывает 64-битные значения, мне было интересно, есть ли какая-нибудь стандартная библиотека, которая будет принимать строку произвольной длины и преобразовывать ее в массив чисел.

Это похоже на довольно простую операцию разбора строки, и я не хочу изобретать колесо.


Примечание:

Из-за проблем с лицензированием (я работаю в большой корпорации, далекой от покупки или принятия законных решений), мне нужно использовать только стандартные библиотеки (GNU, Boost, STL и т. Д.), Иначе это просто возьмет меня слишком долго, чтобы получить доступ к решению.

1 Ответ

2 голосов
/ 11 сентября 2011

Для обработки больших чисел доступно множество библиотек. Первый, который появился в Google, был GMP . Это LGPL, поэтому проблем с лицензированием быть не должно.

mpz_t i;
mpz_init_set_str (i, "0123456789abcdef0123456789abcdef...", 16);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...