所以我正在研究一个基本的RSA解密程序,我试图弄清楚如何在字符串和ZZ之间进行转换。我已经查看了以下问题:How can i convert a string into a ZZ number?但是,我有点困惑,那里的答案对我没有用。我的代码:
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
最后,我尝试了这里发布的解决方案:Regarding create a NTL class type我想我可以尝试一些类型转换。这是我的代码:
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的记录非常糟糕,据我所见,你有没有可以帮助新手进入图书馆的网站?)
答案 0 :(得分: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;
}
如果你有一些非天使字符,如ö
或ß
,你必须使用另一种方法将字符转换为数字。(但我不知道这究竟是如何工作的)< / p>