Название: Чтение двоичного файла Отправлено: 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() :) |