Qt4: посимвольная обработка QString

Есть QString в котором записан текст в utf-16. Нужно в цикле пройтись по каждому символу этого текста, взять его код, преобразовать в int, обработать и записать в другой QString, причем так, чтобы можно было потом провести обратную операцию (шифровка/дешифровка).
Как это сделать в Qt4?

P.S. Велосипеды изобретаю для понимания работы алгоритмов шифрования.

0
_KoT_ - 1 Март, 2011 - 20:10
Изображение пользователя _KoT_.

http://doc.crossplatform.ru/qt/4.7.x/qstring.html#utf16
http://doc.crossplatform.ru/qt/4.7.x/qchar.html#unicode

Помоему тебя уже пора послать в ... гугл. ;)

0
Robotex - 1 Март, 2011 - 20:35

Да я из него не вылезаю.

unicode возвращает const ushort *. Как его преобразовать в int?

0
_KoT_ - 1 Март, 2011 - 21:01
Изображение пользователя _KoT_.

Приведением типов.

А что мешает работать с short-том? Тоже целочисленный тип, только меньше в 2 раза чем int.

0
Robotex - 2 Март, 2011 - 02:37

То что это указатель, а я их жуть как не люблю :)

0
_KoT_ - 2 Март, 2011 - 04:57
Изображение пользователя _KoT_.

Указателефобия о_О ) Ладно.
А по второй ссылке ходил? А какие есть методы в QString возвращающие QChar?

0
Robotex - 4 Март, 2011 - 02:18

at() возвращает QChar, но как ни бился в int преобразовать не смог.

0
_KoT_ - 4 Март, 2011 - 05:35
Изображение пользователя _KoT_.

А по второй ссылке ходил?

0
Robotex - 4 Апрель, 2011 - 09:15

Почему этот код отлично работает с латинницей, но глючит с кириллицей?

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);
}

+1
ktchv - 4 Апрель, 2011 - 10:03
Изображение пользователя ktchv.

полагаю, из-за utf.

0
Robotex - 4 Апрель, 2011 - 13:44

Разве utf не может отображать кириллицу?

0
_KoT_ - 4 Апрель, 2011 - 09:47
Изображение пользователя _KoT_.

А что такое mpz_t?

На правах телепата: Может делать не QByteArray in = input.toUtf8();, а QByteArray in((*char)input.utf16(), input.size()*2 ); ?

0
Robotex - 4 Апрель, 2011 - 13:44

mpz это гигансткое число. Библиотека GMP.

Пробовал - аналогично.

0
Robotex - 4 Апрель, 2011 - 13:45

Кстати, аналогичный код в ПХП работает идеально.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры