Есть QString в котором записан текст в utf-16. Нужно в цикле пройтись по каждому символу этого текста, взять его код, преобразовать в int, обработать и записать в другой QString, причем так, чтобы можно было потом провести обратную операцию (шифровка/дешифровка).
Как это сделать в Qt4?
P.S. Велосипеды изобретаю для понимания работы алгоритмов шифрования.
http://doc.crossplatform.ru/qt/4.7.x/qstring.html#utf16
http://doc.crossplatform.ru/qt/4.7.x/qchar.html#unicode
Помоему тебя уже пора послать в ... гугл. ;)
Да я из него не вылезаю.
unicode возвращает const ushort *. Как его преобразовать в int?
Приведением типов.
А что мешает работать с short-том? Тоже целочисленный тип, только меньше в 2 раза чем int.
То что это указатель, а я их жуть как не люблю :)
Указателефобия о_О ) Ладно.
А по второй ссылке ходил? А какие есть методы в QString возвращающие QChar?
at() возвращает QChar, но как ни бился в int преобразовать не смог.
А по второй ссылке ходил?
Почему этот код отлично работает с латинницей, но глючит с кириллицей?
QByteArray RSA::encode(QString input)
{
QByteArray in = input.toUtf8();
QByteArray out;
QBuffer buffer(&out);
buffer.open(QIODevice::WriteOnly);
QDataStream stream(&buffer);
mpz_t result;
mpz_init(result);
qDebug() << in.length();
for(unsigned int i=0;i<in.length();i++)
{
Pa(result, in.at(i));
stream << (quint64) mpz_get_ui(result);
}
mpz_clear(result);
buffer.close();
return out;
}
QString RSA::decode(QByteArray input)
{
QByteArray in = input;
QByteArray out;
QBuffer buffer(&in);
buffer.open(QIODevice::ReadOnly);
QDataStream stream(&buffer);
mpz_t temp;
mpz_init(temp);
//QString temp_str;
quint64 temp_num;
for(unsigned int i=0;i<in.length();i++)
{
stream >> temp_num;
mpz_set_ui(temp, temp_num);
gmp_printf("%Zd\n", temp);
Sa(temp, temp);
out[i] = (char) mpz_get_ui(temp);
}
mpz_clear(temp);
buffer.close();
return QString::fromUtf8(out);
}
полагаю, из-за utf.
Разве utf не может отображать кириллицу?
А что такое mpz_t?
На правах телепата: Может делать не QByteArray in = input.toUtf8();, а QByteArray in((*char)input.utf16(), input.size()*2 ); ?
mpz это гигансткое число. Библиотека GMP.
Пробовал - аналогично.
Кстати, аналогичный код в ПХП работает идеально.
Отправить комментарий