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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Порядок следования байтов qint64  (Прочитано 6568 раз)
developer-nsk
Гость
« : Сентябрь 03, 2010, 15:51 »

Здравствуйте, господа программисты!
У меня возник следующий вопрос - вывожу в бинарный файл несколько переменных типа qint64 (или long long - без разницы). Затем другое приложение, реализованное на борланд билдере, должно этот бинарник читать. И тут самое интересное - при выводе переменной в бинарный поток Qt не меняет порядок следования байт, как это делают дельфи, билдер и другие языки программирования (то есть Qt пишет байты по порядку, как они идут в переменной). Причём, как я понял, Qt в этом смысле реализует не совсем стандартный подход, то есть замена порядка следования байтов . Поэтому вопрос - можно ли в Qt записывать переменные типа qint64 в бинарный файл через поток так, чтобы порядок следования байтов был изменён и борландовские приложения могли читать их без проблем? Заранее спасибо за помощь.

Код:
    QFile outp("file");
    if (!outp.open(QIODevice::WriteOnly)) printf("Error!");
    QDataStream out(&outp);
    qint64 a=100;
    out << a;
    outp.close();
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #1 : Сентябрь 03, 2010, 16:14 »

гхм.. попробуй void QDataStream::setByteOrder ( ByteOrder bo )
Записан
developer-nsk
Гость
« Ответ #2 : Сентябрь 03, 2010, 16:31 »

Спасибо огромное! Это похоже на то, что нужно! Буду пробовать!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Сентябрь 03, 2010, 19:57 »

>>Qt не меняет порядок ... как это делают дельфи, билдер и другие языки программирования
Веселый
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 04, 2010, 11:03 »

Ну с непривычки little/big endian "бъет по ушам", попробую объяснить популярно. Есть 2 семейства процессоров которые адресуют данные по-разному. Напр число 0x0123 будет записано в памяти так

0x0123  // big endian
0x2301  // little endian

Для тривиального типа любого размера один endian может быть всегда получен из другого перестановкой байт "наоборот". Считается хорошим тоном писать данные на диск в big endian, по умолчанию QDataStream тоже делает так. Как уже сказали это можно изменить, но нет никакой общей "совместимости" с др приложениями. Часто файл данных не содержит никаких указаний об endian, это указывается в документации - и все. Записав данные в одном endian, Вы получаете совместимость с 1 приложением но, возможно, теряете с другим
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Сентябрь 04, 2010, 12:16 »

Советую почитать
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
developer-nsk
Гость
« Ответ #6 : Сентябрь 08, 2010, 18:51 »

Спасибо всем за полезную информацию!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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