Come posso convertire una stringa in un numero ZZ?
Domanda
Sto utilizzando il NTL biblioteca di implementare l'algoritmo di cifratura / decifratura ElGamal.
Ho capito al punto che sta funzionando ma l'algoritmo vuole che il messaggio venga convertito in numeri interi in modo che possa essere criptato.
Quindi, se ho in ingresso un numero come 1234 tutto funziona ok, ma come dovrei fare per essere in grado di convertire una stringa C ++ (std :: string) per un numero ZZ e poi di nuovo da quel numero ZZ in una stringa?
LE :
ZZ è una classe che rappresentano un gran numero.
Es: 18287348238476283658234881728316274273671623781254124517353
Quindi, fondamentalmente sto cercando di prendere "Ciao Mondo", per esempio ed eseguirlo char da char e ottenere il codice ASCII del caratteri in modo che io prendo un numero: "101 108 108 72 111 32 87 111 114 108 100"
E poi ho bisogno di convertire questo numero torna a stringa "Ciao Mondo"
O forse c'è un modo migliore.
Soluzione
Ecco un modo semplice per farlo:
std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());
Ora notare che:
std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
Altri suggerimenti
Ecco una risposta dal sito dell'autore NTL:
Oltre alle conversioni elencati, v'è una conversione generico da un C-stringhe (cioè, const char *) a qualsiasi tipo T, che è implementato utilizzando i modelli utilizzando l'operatore di input >> per il tipo T. Così, per esempio, è possibile scrivere
ZZ x = conv<ZZ>("99999999999999999999999");
Fonte: http://www.shoup.net/ntl/doc/conversions .txt
ho provato, e ha funzionato perfettamente.
Di gran lunga la soluzione più semplice è quella di rendersi conto che è possibile convertire char
s a unsigned int
s, e unsigned int
s a ZZ
numeri. Poi trattare la stringa come numero base-256. Ad esempio, "abc" sarebbe 256 * "ab" + "c", o 65536 * "a" + 256 * "b" + "c", o ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
,