Название: Порядок следования байтов qint64 Отправлено: developer-nsk от Сентябрь 03, 2010, 15:51 Здравствуйте, господа программисты!
У меня возник следующий вопрос - вывожу в бинарный файл несколько переменных типа qint64 (или long long - без разницы). Затем другое приложение, реализованное на борланд билдере, должно этот бинарник читать. И тут самое интересное - при выводе переменной в бинарный поток Qt не меняет порядок следования байт, как это делают дельфи, билдер и другие языки программирования (то есть Qt пишет байты по порядку, как они идут в переменной). Причём, как я понял, Qt в этом смысле реализует не совсем стандартный подход, то есть замена порядка следования байтов . Поэтому вопрос - можно ли в Qt записывать переменные типа qint64 в бинарный файл через поток так, чтобы порядок следования байтов был изменён и борландовские приложения могли читать их без проблем? Заранее спасибо за помощь. Код: QFile outp("file"); Название: Re: Порядок следования байтов qint64 Отправлено: vipet от Сентябрь 03, 2010, 16:14 гхм.. попробуй void QDataStream::setByteOrder ( ByteOrder bo )
Название: Re: Порядок следования байтов qint64 Отправлено: developer-nsk от Сентябрь 03, 2010, 16:31 Спасибо огромное! Это похоже на то, что нужно! Буду пробовать!
Название: Re: Порядок следования байтов qint64 Отправлено: lit-uriy от Сентябрь 03, 2010, 19:57 >>Qt не меняет порядок ... как это делают дельфи, билдер и другие языки программирования
:D Название: Re: Порядок следования байтов qint64 Отправлено: Igors от Сентябрь 04, 2010, 11:03 Ну с непривычки little/big endian "бъет по ушам", попробую объяснить популярно. Есть 2 семейства процессоров которые адресуют данные по-разному. Напр число 0x0123 будет записано в памяти так
0x0123 // big endian 0x2301 // little endian Для тривиального типа любого размера один endian может быть всегда получен из другого перестановкой байт "наоборот". Считается хорошим тоном писать данные на диск в big endian, по умолчанию QDataStream тоже делает так. Как уже сказали это можно изменить, но нет никакой общей "совместимости" с др приложениями. Часто файл данных не содержит никаких указаний об endian, это указывается в документации - и все. Записав данные в одном endian, Вы получаете совместимость с 1 приложением но, возможно, теряете с другим Название: Re: Порядок следования байтов qint64 Отправлено: Пантер от Сентябрь 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 (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) Название: Re: Порядок следования байтов qint64 Отправлено: developer-nsk от Сентябрь 08, 2010, 18:51 Спасибо всем за полезную информацию!
|