如何将字符串转换为ZZ编号?

时间:2010-01-22 13:01:06

标签: c++ ntl elgamal

我正在使用NTL library来实现ElGamal加密/解密算法。 我已经知道它正在工作,但算法希望将消息转换为整数,以便加密。
所以,如果我输入一个像1234这样的数字,一切正常,但我怎样才能将C ++字符串(std :: string)转换为ZZ编号,然后从该ZZ编号转换为字符串?

LE

ZZ这是一个代表大量的类 例如:18287348238476283658234881728316274273671623781254124517353

所以基本上我想以“Hello World”为例,然后用char运行char并得到字符的ascii代码,这样我就得到一个数字:“72 101 108 108 111 32 87 111 114 108 100"
然后我需要将此数字转换回字符串“Hello World”

或许还有更好的方法。

3 个答案:

答案 0 :(得分:3)

以下是NTL作者网站的回答:

  

除了列出的转化,还有一般转换   从 C-strings (即const char *)到任何类型T,即   使用输入运算符>>使用模板实现对于类型T.   所以,例如,你可以写

    ZZ x = conv<ZZ>("99999999999999999999999");

来源:http://www.shoup.net/ntl/doc/conversions.txt

我试过了,它运作得很好。

答案 1 :(得分:2)

这是一种简单的方法:

std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());

现在请注意:

std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890

答案 2 :(得分:0)

到目前为止,最简单的解决方案是意识到您可以将char转换为unsigned int s,将unsigned int转换为ZZ个数字。然后将字符串视为base-256数字。例如,“abc”将为256 *“ab”+“c”,或65536 *“a”+ 256 *“b”+“c”,或((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))