Como posso converter uma string em um número ZZ?
Pergunta
Estou usando o Biblioteca NTL Para implementar o algoritmo de criptografia/descriptografia elgamal. Eu tenho a ponto de estar funcionando, mas o algoritmo deseja que a mensagem seja convertida em números inteiros para que possa ser criptografada.
Então, se eu inserir um número como 1234, tudo funciona bem, mas como eu seria capaz de converter uma string c ++ (std :: string) em um número ZZ e depois voltar desse número ZZ para uma string?
Le:
ZZ É uma classe que representa um grande número.
Ex: 18287348238476283658234881728316274273671623781254124517353
Então, basicamente, estou procurando pegar "Hello World", por exemplo, e executá -lo char por char e obter o código ASCII dos chars, para obter um número: "72 101 108 108 111 32 87 111 114 108 100"
E então eu preciso converter esse número de volta para a string "Hello World"
Ou talvez exista uma maneira melhor.
Solução
Aqui está uma maneira fácil de fazer isso:
std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());
Agora observe que:
std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
Outras dicas
Aqui está uma resposta do site do autor da NTL:
Além das conversões listadas, há uma conversão genérica de um Strings c (ou seja, const char *) para qualquer tipo T, que é implementado usando modelos usando o operador de entrada >> para o tipo T. Então, por exemplo, você pode escrever
ZZ x = conv<ZZ>("99999999999999999999999");
Fonte: http://www.shoup.net/ntl/doc/conversions.txt
Eu tentei e funcionou perfeitamente.
De longe, a solução mais fácil é perceber que você pode converter char
s para unsigned int
areia unsigned int
s para ZZ
números. Em seguida, trate a string como um número de base 256. Por exemplo, "abc" seria 256 * "ab" + "c" ou 65536 * "a" + 256 * "b" + "c", ou ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,