Как я могу преобразовать строку в число ZZ? - PullRequest
1 голос
/ 22 января 2010

Я использую библиотеку 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 ]

3 голосов
/ 14 марта 2018

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

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

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

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

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

2 голосов
/ 26 августа 2013

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

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
0 голосов
/ 22 января 2010

Самое простое решение - понять, что вы можете конвертировать 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')),

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