Russian Qt Forum

Qt => Вопросы новичков => Тема начата: fdsatrew от Март 13, 2015, 19:07



Название: Русские символы в бинарном файле.
Отправлено: fdsatrew от Март 13, 2015, 19:07
Здравствуйте, господа форумчане. Имеется бинарный файл следующей структуры:
int32 n;
string text; в неизвестной кодировке, но есть алгоритм на C# для перевода text в читаемый человеком вид:
Код:
    public static string decode(int n, byte[] text)
    {
        string result = "";
        byte[] data = new byte[2];
        for (int i = 0; i < text.Length; i += 2)
        {
            data = BitConverter.GetBytes((short)key);
            // XOR decoding to receive Unicode character code
            data[0] ^= text[i];
            data[1] ^= text[i + 1];
            result += BitConverter.ToChar(data, 0);
        }
        return result.TrimEnd(new char[] { '\0' });
    }
, который я переписал под Qt:
Код:
// Class.decode(n, text.toLocal8Bit())
QString Class::decode(int n, QByteArray text)
{
    QByteArray data;
    QString result;
    short a = n;
    for (int i = 0; i < text.length(); i += 2)
    {
        data.fill(a, sizeof(a));
        // XOR decoding to receive Unicode character code
        data[0] = data[0] ^ text[i];
        data[1] = data[1] ^ text[i + 1];
        result.append(data.data());
    }
    return result.trimmed();
}
Код:
void Class::ReadText(QFile *file)
{
    QByteArray data;
    for(int i=0;i<60;i++) {
    data = file->read(1);
    if(data.data()!='\0')
    text.append(data.data());
    }
}
И мой результат формата n - text(первая строчка "Test", вторая строчка "Тест"):
(http://s30.postimg.org/61hqtjrnx/image.png)
Проблема с кодировкой налицо, но я не представляю что делать и надеюсь на вашу помощь...


Название: Re: Русские символы в бинарном файле.
Отправлено: kambala от Март 13, 2015, 21:09
почему конвертация в байт-массив через toLocal8Bit и что такое key? вот в каком виде читаешь из файла, в таком и подавай в свою функцию, не надо никаких преобразований в/из QString. ну и реализация ReadText() не очень.


Название: Re: Русские символы в бинарном файле.
Отправлено: fdsatrew от Март 13, 2015, 22:47
почему конвертация в байт-массив через toLocal8Bit и что такое key? вот в каком виде читаешь из файла, в таком и подавай в свою функцию, не надо никаких преобразований в/из QString. ну и реализация ReadText() не очень.
key это n, извиняюсь. Попробую, то что ты сказал и отпишусь...