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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите растормозиться  (Прочитано 6367 раз)
L.Marvell
Гость
« : Август 15, 2005, 16:33 »

Подозреваю, что вопрос довольно глупый, но все же нуждаюсь в помощи... Нужно из файла считать 4 байта, содержащие размер в шестнадцатиричной системе. При считывании получаю символы (например "О" с верхним двоеточием /не знаю как оно правильно называется/ и "g"), а как их перевести в цифры то? Читаю в QByteArray с помощью read(Q_INT64_C(4)). Поскольку считываются символы, то естественно toInt() не дает нужного результата.
Записан
Sergeich
Гость
« Ответ #1 : Август 15, 2005, 17:03 »

Ни хрена не понял!!! Как размер записан в эти 4 байта? В бинарном виде или в текстовом в 16-тиричке?
Записан
L.Marvell
Гость
« Ответ #2 : Август 15, 2005, 17:09 »

Цитата: "Sergeich"
Ни хрена не понял!!! Как размер записан в эти 4 байта? В бинарном виде или в текстовом в 16-тиричке?

Мдя, фиговенько выразился я... Вообщем bmp файл, вот.
Записан
Sergeich
Гость
« Ответ #3 : Август 15, 2005, 17:19 »

Цитата: "L.Marvell"

Мдя, фиговенько выразился я... Вообщем bmp файл, вот.

Вообщем так: если число записано в бинарном виде юзай QDataStream & operator>> ( Q_INT32 & ) и не забудь правильно выставить порядок байт ( QDataStream::setByteOrder ( int ) ). Если в текстовом - юзай QString::toInt( &ok, 16 )
Записан
L.Marvell
Гость
« Ответ #4 : Август 15, 2005, 17:30 »

Цитата: "Sergeich"
Цитата: "L.Marvell"

Мдя, фиговенько выразился я... Вообщем bmp файл, вот.

Вообщем так: если число записано в бинарном виде юзай QDataStream & operator>> ( Q_INT32 & ) и не забудь правильно выставить порядок байт ( QDataStream::setByteOrder ( int ) ). Если в текстовом - юзай QString::toInt( &ok, 16 )

Значит будем пробовать еще QDataStream, так как toInt не помог. Пасибо. Если-что, сообщу.
Записан
L.Marvell
Гость
« Ответ #5 : Август 15, 2005, 19:12 »

Все таки туплю дальше... :oops:

Код:
if (file.open(QIODevice::ReadOnly)) {
QByteArray data = file.read(Q_INT64_C(2));
QMessageBox::information(this, tr("message"), data);
...
file.close();
}


Вместо троеточия нужно считать следующие 4 байта, содержащие размер файла. Как тут использовать QDataStream я не понял... Эксперименты ни к чему хорошему не привели Грустный
Записан
Sergeich
Гость
« Ответ #6 : Август 15, 2005, 19:40 »

Код:

if (file.open(QIODevice::ReadOnly)) {
      QByteArray data = file.read(Q_INT64_C(2));
      QMessageBox::information(this, tr("message"), data);
      QDataStream stream( &file );
      stream.setByteOrder(QDataStream::LittleEndian); // или BigEndian
      int filesize;
      stream >> filesize;
      QMessageBox::information(this, "Debug", tr("file size : %1").arg(filesize) );
      file.close();
}
Записан
L.Marvell
Гость
« Ответ #7 : Август 16, 2005, 12:25 »

Шоб мне пусто было! Я делал нечто подобное, но оказывается все-таки не так, потому что не работало.... Огромное спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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