2014-11-13 2 views
2

Итак, я работаю над базовой программой расшифровки RSA, и я пытаюсь понять, как преобразовать строку и ZZ. Я рассмотрел следующий вопрос: How can i convert a string into a ZZ number?, однако, я немного смущен, и ответ там не сработал для меня. Мой код:Преобразование NTL в ZZ и ZZ в String

fromBase() 
{ 
    string message = "hello world"; 
    ZZ number (INIT_VAL, message.c_str()); 
    cerr << number; 
} 

Дает мне следующий выход.

bad ZZ input 
Aborted 

Итак, я подумал, не большая проблема, я не буду просто пытаться найти то, что INIT_VAL должно быть, и это должно дать мне представление о том, где искать. Но не было такой удачи, я не мог найти ничего похожего на это. Я trued его 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 является довольно плохо документированы, от того, что я видел, у вас есть какие-либо сайты, которые могут помочь новичку в библиотеку?)

ответ

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, как ö или ß вы должны используйте другой способ преобразования символа в число. (Но я не знаю, как именно это работает)