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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение двоичного файла  (Прочитано 5810 раз)
timur85
Гость
« : Март 29, 2007, 00:23 »

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

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

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

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

 Использовал Qt3)))
Записан
Sergeich
Гость
« Ответ #1 : Март 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
Гость
« Ответ #2 : Март 29, 2007, 07:20 »

Ну и про 0x4B0 в 0x0B4 - это сказки, не верю.
В 0xB004 наполовину верю, но врядли у Вас инты 16разр.
Скорее 0xB0040000.
Улыбающийся
Записан
timur85
Гость
« Ответ #3 : Март 29, 2007, 12:22 »

Да, 16-разрядный. Извините за упрощение... Веселый
Записан
evilguard
Гость
« Ответ #4 : Март 29, 2007, 13:16 »

Sergeich А как массив int считывать используя QT?
Записан
timur85
Гость
« Ответ #5 : Март 29, 2007, 13:25 »

Прочитал статью с wiki. Спасибо Sergeich. Много разъяснило.
Но столкнулся с интересной фактом. Я попытался обойти проблему
используя стандартный C++(т.е. его средства  Улыбающийся ).
И он вывел все в правильном порядке (нужным мне).
Неужели это связано с внутренней реализацией Qt.
Записан
Sergeich
Гость
« Ответ #6 : Март 29, 2007, 14:52 »

Цитата: "evilguard"
Sergeich А как массив int считывать используя QT?
QDataStream::readBytes()  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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