NTL字符串到ZZ的转换和ZZ到字符串

NTL String to ZZ conversion and ZZ to String

本文关键字:ZZ 字符串 转换 NTL      更新时间:2023-10-16

所以我正在编写一个基本的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字符,如öß,则必须使用其他方法将字符转换为数字。(但我不知道这到底是怎么回事)