Как я могу преобразовать строку в число ZZ?

Я использую библиотеку NTL для реализации алгоритма шифрования / дешифрования ElGamal. Я понял, что он работает, но алгоритм хочет, чтобы сообщение было преобразовано в целые числа, чтобы его можно было зашифровать.
Так что, если я ввожу число, например 1234, все работает нормально, но как мне получить возможность преобразовать строку C++ (std::string) в число ZZ и затем вернуться из этого числа ZZ в строку?

LE:

ZZ это класс, который представляет большое количество.
Например: 18287348238476283658234881728316274273671623781254124517353

В общем, я собираюсь взять, например, "Hello World" и запустить его char на char и получить код ascii символов, так что я получу число: "72 101 108 108 111 32 87 111 114 108 100"
И тогда мне нужно преобразовать это число обратно в строку "Hello World"

Или, может быть, есть лучший способ.

3 ответа

Решение

Вот простой способ сделать это:

std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());

Теперь обратите внимание, что:

std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890

Вот ответ с сайта автора NTL:

В дополнение к перечисленным преобразованиям существует общее преобразование C-строк (т. Е. Const char *) в любой тип T, которое реализуется с помощью шаблонов с использованием оператора ввода >> для типа T. Так, например, вы могу написать

    ZZ x = conv<ZZ>("99999999999999999999999");

Источник: http://www.shoup.net/ntl/doc/conversions.txt

Я попробовал, и это сработало отлично.

Безусловно, самое простое решение - понять, что вы можете конвертировать charс unsigned intс и unsigned intс ZZ номера. Затем обработайте строку как число-256. Например, "abc" будет 256*"ab" + "c" или 65536 * "a" + 256 * "b" + "c", или ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

Другие вопросы по тегам