¿Cómo puedo convertir una cadena en un número ZZ?
Pregunta
Estoy usando el NTL biblioteca ElGamal para implementar la encriptación / desencriptación algoritmo.
Tengo hasta el punto de que está funcionando pero el algoritmo quiere que el mensaje se convierte en números enteros para que pueda ser encriptada.
Así que si de entrada i un número como 1234 todo funciona bien, pero ¿cómo voy a ser capaz de convertir una cadena de C ++ (std :: string) a un número ZZ y luego de vuelta de ese número ZZ a una cadena?
LE
ZZ es una clase que representan un gran número.
Ej: 18287348238476283658234881728316274273671623781254124517353
Así que, básicamente estoy en busca de tomar "Hello World" por ejemplo y ejecutarlo charla por carbón y obtener el código ASCII de los caracteres de manera voy a conseguir un número: "101 108 108 72 111 32 87 111 114 108 100"
Y entonces necesito para convertir este número de devolución de cadena "Hola Mundo"
O tal vez hay una mejor manera.
Solución
Esta es una manera fácil de hacerlo:
std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());
Ahora aviso de que:
std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
Otros consejos
Esta es una respuesta de la web del autor NTL:
Además de las conversiones mencionadas, hay una conversión genérico de una C-strings (es decir, const char *) para cualquier tipo T, que es implementado utilizando plantillas usando el operador de entrada >> para el tipo T. Así, por ejemplo, puede escribir
ZZ x = conv<ZZ>("99999999999999999999999");
Fuente: http://www.shoup.net/ntl/doc/conversions .txt
Yo probé y funcionó a la perfección.
Con mucho, la solución más fácil es darse cuenta de que se puede convertir a char
s unsigned int
s y unsigned int
s a los números ZZ
. Luego tratar la cadena como un número de base-256. Por ejemplo, "abc" sería 256 * + "c" 65536 * "a" + 256 * "b" "ab" + "c", o, o ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,