Russian Qt Forum

Qt => Общие вопросы => Тема начата: L.Marvell от Август 15, 2005, 16:33



Название: Помогите растормозиться
Отправлено: L.Marvell от Август 15, 2005, 16:33
Подозреваю, что вопрос довольно глупый, но все же нуждаюсь в помощи... Нужно из файла считать 4 байта, содержащие размер в шестнадцатиричной системе. При считывании получаю символы (например "О" с верхним двоеточием /не знаю как оно правильно называется/ и "g"), а как их перевести в цифры то? Читаю в QByteArray с помощью read(Q_INT64_C(4)). Поскольку считываются символы, то естественно toInt() не дает нужного результата.


Название: Помогите растормозиться
Отправлено: Sergeich от Август 15, 2005, 17:03
Ни хрена не понял!!! Как размер записан в эти 4 байта? В бинарном виде или в текстовом в 16-тиричке?


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

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


Название: Помогите растормозиться
Отправлено: Sergeich от Август 15, 2005, 17:19
Цитата: "L.Marvell"

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

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


Название: Помогите растормозиться
Отправлено: L.Marvell от Август 15, 2005, 17:30
Цитата: "Sergeich"
Цитата: "L.Marvell"

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

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

Значит будем пробовать еще QDataStream, так как toInt не помог. Пасибо. Если-что, сообщу.


Название: Помогите растормозиться
Отправлено: L.Marvell от Август 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 от Август 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 от Август 16, 2005, 12:25
Шоб мне пусто было! Я делал нечто подобное, но оказывается все-таки не так, потому что не работало.... Огромное спасибо!