Russian Qt Forum

Qt => Общие вопросы => Тема начата: timur85 от Март 29, 2007, 00:23



Название: Чтение двоичного файла
Отправлено: timur85 от Март 29, 2007, 00:23
Столкнулся с проблемой. При чтении двоичного файла средствами
Qt возникает такая неприятная вещь:
При чтении из потока значений типа int(вообще считывается в динамический массив и он выводится), они "переворачиваются",
т.е. если было число,к примеру, 1200 (что в 16-ой системе 4B0),
считывается 180 (что в 16-ой системе 0B4), и так повсеместно :x
Может кто подскажет в чем проблема?
(использовал только средства Qt)

добавлено спустя 1 минуту:

 Да такая же проблема насколько я слышал возникает и в Java

добавлено спустя:

 Использовал Qt3)))


Название: Чтение двоичного файла
Отправлено: Sergeich от Март 29, 2007, 02:47
1. Выясни в каком формате (BigEndian или LittleEndian) записаны int'ы в файле.
2. Либо юзай QDataStream::setByteOrder и читай каждый int по отдельности ( медленно ), либо зачитывай массив int'ов куском и пройдись по нему ntohl в цикле.
3. Enjoy

добавлено спустя 3 минуты:

 P.S. По поводу порядка байтов можно прочитать например здесь: http://ru.wikipedia.org/wiki/Big-endian


Название: Чтение двоичного файла
Отправлено: Alex03 от Март 29, 2007, 07:20
Ну и про 0x4B0 в 0x0B4 - это сказки, не верю.
В 0xB004 наполовину верю, но врядли у Вас инты 16разр.
Скорее 0xB0040000.
:)


Название: Чтение двоичного файла
Отправлено: timur85 от Март 29, 2007, 12:22
Да, 16-разрядный. Извините за упрощение... :D


Название: Чтение двоичного файла
Отправлено: evilguard от Март 29, 2007, 13:16
Sergeich А как массив int считывать используя QT?


Название: Чтение двоичного файла
Отправлено: timur85 от Март 29, 2007, 13:25
Прочитал статью с wiki. Спасибо Sergeich. Много разъяснило.
Но столкнулся с интересной фактом. Я попытался обойти проблему
используя стандартный C++(т.е. его средства  :) ).
И он вывел все в правильном порядке (нужным мне).
Неужели это связано с внутренней реализацией Qt.


Название: Чтение двоичного файла
Отправлено: Sergeich от Март 29, 2007, 14:52
Цитата: "evilguard"
Sergeich А как массив int считывать используя QT?
QDataStream::readBytes()  :)