Russian Qt Forum
Сентябрь 30, 2024, 12:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Русские символы в бинарном файле.  (Прочитано 2176 раз)
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", вторая строчка "Тест"):

Проблема с кодировкой налицо, но я не представляю что делать и надеюсь на вашу помощь...
« Последнее редактирование: Март 13, 2015, 22:42 от fdsatrew » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Март 13, 2015, 21:09 »

почему конвертация в байт-массив через toLocal8Bit и что такое key? вот в каком виде читаешь из файла, в таком и подавай в свою функцию, не надо никаких преобразований в/из QString. ну и реализация ReadText() не очень.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
fdsatrew
Гость
« Ответ #2 : Март 13, 2015, 22:47 »

почему конвертация в байт-массив через toLocal8Bit и что такое key? вот в каком виде читаешь из файла, в таком и подавай в свою функцию, не надо никаких преобразований в/из QString. ну и реализация ReadText() не очень.
key это n, извиняюсь. Попробую, то что ты сказал и отпишусь...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 23.