Поэтому я работаю над базовой программой расшифровки 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 довольно плохо документирован, из того, что я видел, есть ли у вас сайты, которые могут помочь новичку в библиотеке?)
Вы хотите преобразовать строку, которая на самом деле содержит не числовые символы в число.
Канонического номера строки не существует, поэтому вы не можете сделать это за один шаг. 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, такие как ö
или же ß
Вы должны использовать другой способ преобразования символа в число (но я не знаю, как именно это работает)