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

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

Страниц: 1 2 [3] 4 5   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Чтение бинарного файла  (Прочитано 30831 раз)
Larry
Гость
« Ответ #30 : Апрель 23, 2016, 08:34 »

прочитал в массив char[10] с помощью readRawData и получил следующее #73397?v #6. Там где #, то там выводятся элементы псевдографики. В id должны быть только цифры и в данном случае это 73397. И перед id остается 1 байт, который равен у меня 5.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #31 : Апрель 23, 2016, 08:37 »

Да, сейчас при чтении в int получаю единицу, там как раз одна структура. А как из QDataStream прочитать в QString?
Нужно прочитать в QByteArray размер строки (10 или 200) + 1 байт. 1 байт содержит реальное кол-во символов в строке, дальше идут сами символы. В какой кодировке эти символы нужно узнать у писателя. А дальше массив символов можно будет преобразовать в QString через QTextCodec, используя QTextCodec::toUnicode.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #32 : Апрель 23, 2016, 09:04 »

А как из QDataStream прочитать в QString?
Код
C++ (Qt)
QDataStream strm;
strm.setByteOrder(..);
...
int count;
strm >> count;
char buf[11];
strm.readRawData(buf, 11);
QString test(QByteArray(buf + 1, buf[0]));
qDebug() << test;
« Последнее редактирование: Апрель 23, 2016, 09:22 от Igors » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #33 : Апрель 23, 2016, 09:09 »

Код
C++ (Qt)
QDataStream strm;
QString test(QByteArray(buf + 1, buf[0]));
 
Не уверен, что строки там в utf-8.
Записан
Larry
Гость
« Ответ #34 : Апрель 23, 2016, 09:17 »

А как из QDataStream прочитать в QString?
Код
C++ (Qt)
QDataStream strm;
strm.setByteOrder(..);
...
int count;
strm << count;
char buf[11];
strm.readRawData(buf, 11);
QString test(QByteArray(buf + 1, buf[0]));
qDebug() << test;

Да спасибо, так сработало:)
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #35 : Апрель 23, 2016, 09:18 »

Да спасибо, так сработало:)
Вы попробуйте с русскими комментариями... Подмигивающий
Записан
Larry
Гость
« Ответ #36 : Апрель 23, 2016, 09:21 »

Да с русскими там вопросительные знаки:). Тогда через QTextCodec?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #37 : Апрель 23, 2016, 09:22 »

Да с русскими там вопросительные знаки:). Тогда через QTextCodec?
Тогда да. Улыбающийся
Записан
Larry
Гость
« Ответ #38 : Апрель 23, 2016, 09:24 »

Хорошо, спасибо. Попробую дальше прочитать.
Записан
Larry
Гость
« Ответ #39 : Апрель 23, 2016, 09:27 »

Сделал так:
Код:
QTextCodec* codec = QTextCodec::codecForName("windows-1251");
qDebug() << codec->toUnicode(buf) << ", " << codec->toUnicode(buf);

выдает: "\u000573397єv \u0016k\u000573397єv \u0016k"
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #40 : Апрель 23, 2016, 09:29 »

Сделал так:
А buf как получается? И сразу дамп данных покажите который читаете.
« Последнее редактирование: Апрель 23, 2016, 09:31 от Old » Записан
Larry
Гость
« Ответ #41 : Апрель 23, 2016, 09:34 »

То я обшибся, вывел 2 раза buf, теперь выводит:
"\u000573397єv \u0016ku001Cкомментарий (200 символов)\r\n \u0016k\tЂш\u0012"
Записан
Larry
Гость
« Ответ #42 : Апрель 23, 2016, 09:40 »

А как избавиться \u0005 и от других символов?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #43 : Апрель 23, 2016, 09:43 »

А как избавиться \u0005 и от других символов?
Я же чуть выше попросил вас показать как вы получаете buf и дамп данных, которые читаете в данный момент.
Записан
Larry
Гость
« Ответ #44 : Апрель 23, 2016, 09:45 »

Код:
QDataStream stream(&file);
stream.setByteOrder(QDataStream::LittleEndian);

int count;
stream >> count;
char buf[11];
stream.readRawData(buf, 11);
char buf2[201];
stream.readRawData(buf2, 201);

QTextCodec* codec = QTextCodec::codecForName("windows-1251");
file.close();

QMessageBox::about(this, "title", codec->toUnicode(buf) + ", " + codec->toUnicode(buf2));

то что выводит на изображении.
Записан
Страниц: 1 2 [3] 4 5   Вверх
  Печать  
 
Перейти в:  


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