Название: Считывание пользовательского типа из файла Отправлено: merke от Сентябрь 25, 2009, 16:26 Всем привет!
Столкнулся с проблемой. Я на Visual Basic созжаю переменую пользовательского типа допустим с тремя элементами каждый из которых имеет тип String. Теперь данную струкруту я заполняю данными и записываю её в бинарный файл. Теперь средствами QT пытаюсь считать данную структуру из файла. Т.е. создаю такой же пользовательский тип к примеру: Код: struct mytype Далее открываю файл в бинарном режиме и считываю струкруту. Код: QFile infile1("C:\\dt1.dat"); Для того чтобы считать структуру я перегружаю операторы << и >> Код: friend QDataStream &operator<<(QDataStream & ds, myst &calData) Но после считывания я получаю пустые строки, т.е. ни чего не считывается. Помогите пожалуйста разобраться с данной проблемой. Или объясните почему данное нельзя реализовать. Название: Re: Считывание пользовательского типа из файла Отправлено: SimpleSunny от Сентябрь 25, 2009, 18:18 Код
Название: Re: Считывание пользовательского типа из файла Отправлено: BRE от Сентябрь 25, 2009, 18:25 Тут бы еще посмотреть как оно в Basic'е строки записывает, в какой кодировке.
Название: Re: Считывание пользовательского типа из файла Отправлено: SLiDER от Сентябрь 25, 2009, 19:46 Эммммм, в документации как бы написано: "Each item written to the stream is written in a predefined binary format that varies depending on the item's type". Вы абсолютно уверены что в своей программе на Visual Basic совершенно точно воспроизвели этот самый формат который QDataStream ожидает увидеть при попытке прочитать QString, судя по тому что вы написали - нет.
Название: Re: Считывание пользовательского типа из файла Отправлено: crackedmind от Сентябрь 26, 2009, 13:32 При использовании QDataStream, QString записывается ввиде: 4 байта длина строки, затем сама строка идет.
Название: Re: Считывание пользовательского типа из файла Отправлено: Igors от Сентябрь 26, 2009, 13:39 При использовании QDataStream, QString записывается ввиде: 4 байта длина строки, затем сама строка идет. А так ли это на Ваське? Сначала надо пописАть строки здесь и там и файлы сравнить.Название: Re: Считывание пользовательского типа из файла Отправлено: merke от Сентябрь 26, 2009, 15:44 Спасибо! Вот например если я на бэйсике записываю структуру состоящую из трёх элементов и каждый имеет тип Integer. Всё это дело заполняю данными и записываю в бинарник. Теперь в Кутищище создаю точно такую же структуру тока элементы имеют тип quint16 так как бэйсиковский Integer имеет размер 2 байта. Теперь я считываю файлик. Считать получается, только вот в переменные записаны не сами числа, а их байтовое представление, например записал на бэйсике 1 в Qt получил 256, думаю понятно)))
Как мне теперь преобразовать всё это дело? Название: Re: Считывание пользовательского типа из файла Отправлено: SLiDER от Сентябрь 26, 2009, 21:45 Цитировать только вот в переменные записаны не сами числа, а их байтовое представление, например записал на бэйсике 1 в Qt получил 256, думаю понятно))) Нет, непонятно. ??? Название: Re: Считывание пользовательского типа из файла Отправлено: Igors от Сентябрь 27, 2009, 11:44 Считать получается, только вот в переменные записаны не сами числа, а их байтовое представление, например записал на бэйсике 1 в Qt получил 256, думаю понятно))) Судя по тому что Вы рассказываете, данные записаны в BIG_ENDIAN.Как мне теперь преобразовать всё это дело? Попробуйте QDataStream::setByteOrder(QDataStream::BigEndian); Edit: посмотрел Assistant, там сказано что BigEndian по default (все правильно, по классике). Значит пробуйте QDataStream::LittleEndian, короче: запись и чтение должны быть в одном Endian |