Преобразование строки NTL в ZZ и преобразование ZZ в строку

Поэтому я работаю над базовой программой расшифровки RSA и пытаюсь понять, как преобразовать строку в ZZ. Я посмотрел на следующий вопрос: Как я могу преобразовать строку в число ZZ?, однако, я немного запутался, и ответ там не работал для меня. Мой код:

fromBase()
{
string message = "hello world";
ZZ number (INIT_VAL, message.c_str());
cerr << number;
}

Дает мне следующий вывод.

bad ZZ input
Aborted

Итак, я подумал, ничего страшного, я просто попытаюсь найти, каким должен быть INIT_VAL, и это должно дать мне представление о том, где искать. Но не повезло, я не смог найти ничего похожего на это. Я также использовал INIT_VAL_STRUCT и получил следующую ошибку:

base.cpp: In function âNTL::ZZ fromBase(std::string)â:
base.cpp:24: error: âmessageâ is not a type
base.cpp:24: error: expected â,â or â...â before â.â token

Наконец, я попробовал решение, размещенное здесь: Относительно создания типа класса NTL думая, что я мог бы попробовать некоторые типы кастинга. Вот мой код:

ZZ fromBase(string message)
{
ZZ x;
x = conv<ZZ>(message);
return x;
}

Это дало мне следующее:

g++ base.cpp -lntl
base.cpp: In function âNTL::ZZ fromBase(std::string)â:
base.cpp:19: error: expected primary-expression before â>â token

Как будто я не указал тип.

В заключение я знаю, что INIT_VAL — это константа, но, похоже, она не работает с чем-то. Я чувствую, что только что отключился, но попытаться найти это нелегко. Любая помощь будет принята с благодарностью, и любые ссылки на NTL будет принята с благодарностью. Простите за длинный пост!

(Кроме того, NTL довольно плохо документирован, из того, что я видел, есть ли у вас сайты, которые могут помочь новичку в библиотеке?)

2

Решение

Вы хотите преобразовать строку, которая на самом деле содержит не числовые символы в число.

Канонического номера строки не существует, поэтому вы не можете сделать это за один шаг. C ++ может дать вам номер символа, который является числом ASCII. Вы можете использовать эту функцию для получения номера строки ascii:

ZZ stringToNumber(string str)
{
ZZ number = conv<ZZ>(str[0]);
long len = str.length();
for(long i = 1; i < len; i++)
{
number *= 128;
number += conv<ZZ>(str[i]);
}

return number;
}

Вы получаете строку обратно с помощью этой функции

string numberToString(ZZ num)
{
long len = ceil(log(num)/log(128));
char str[len];
for(long i = len-1; i >= 0; i--)
{
str[i] = conv<int>(num % 128);
num /= 128;
}

return (string) str;
}

Если у вас есть не символы ascii, такие как ö или же ß Вы должны использовать другой способ преобразования символа в число (но я не знаю, как именно это работает)

2

Другие решения


По вопросам рекламы [email protected]