【问题标题】:NTL String to ZZ conversion and ZZ to StringNTL String 到 ZZ 的转换和 ZZ 到 String
【发布时间】:2014-11-13 03:20:22
【问题描述】:

所以我正在开发一个基本的 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 的文档记录也很差,据我所知,您有任何网站可以帮助图书馆的新手吗?)

【问题讨论】:

    标签: c++ string ntl


    【解决方案1】:

    您想将实际上包含非数字字符的字符串转换为数字。

    字符串没有规范的数字,因此您不能一步完成。 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 字符,例如 öß,您必须使用另一种方式将字符转换为数字。(但我不知道具体是如何工作的)

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多