Russian Qt Forum

Qt => Общие вопросы => Тема начата: merke от Сентябрь 26, 2009, 19:38



Название: Как использовать memcpy
Отправлено: merke от Сентябрь 26, 2009, 19:38
Всем привет!
У меня есть вопрос, как использовать функцию memcpy. К примеру я имею байтовый массив мне нужно его преобразовать в тип quint16.
В общем делаю так:
На Visual Basic 6 я создаю пользовательский тип с тремя элементами каждый из которых имеет тип Integer, всё это дело я записываю в бинарный файл. Теперь на Кутищище я создаю в точ такую же структуру с теми же элементами с типами quint16 так как в VB тип Integer представляет собой  двухбайтовую переменую. Считываю я из бинарки мой пользовательский тип до этого перегрузив операторы << и >>. Теперь после считывания я получаю байтовое представление записанных чисел на бэйсике.
Хочу переписывать в байтовый массив и всё это дело конвертировать посредством memcpy Помню есть апишка CopyMemory. Думаю это тоже самое.
Привожу свой код.

Код:
void MainWindow::readStruct()
{
    mystr str1[10]; //Структура
    QFile file1("C:\\temp.dat");;
    file1.open(QIODevice::ReadOnly);
    QDataStream stre(&file1);
        stre >> str1[0];
        QByteArray mt;
        mt.setNum(str1[0].age, 10);
        quint16 num;
        memcpy(&num, mt, 2);
        qDebug() <<  num;

    }
        file1.close();
}
Ничего не получается, код то запускается, вот только результат далеко не похож на истинный.
Пожалуйста, помогите мне! Буду оченб благодарен!


Название: Re: Как использовать memcpy
Отправлено: Rcus от Сентябрь 26, 2009, 19:54
/* \facepalm */
посмотрите что делает QByteArray::setNum :)


Название: Re: Как использовать memcpy
Отправлено: SLiDER от Сентябрь 26, 2009, 21:58
Блин, Visual Basic атакует  :( Я больше половины из того что вы говорите непонимаю, вот что например такое
Цитировать
байтовое представление записанных чисел
Может все таки почитать что-нибудь по C/C++, и вообще RTFM, эти языки весьма сильно отличаются от Visual Basic.


Название: Re: Как использовать memcpy
Отправлено: Igors от Сентябрь 27, 2009, 11:39
1) Никто не обещал что Васька будет писать в том же формате что и Qt

2) Никто не обещал что данные будут записаны в том же формате (и занимать столько же байт) что и в памяти. Это надо как минимум проверить (как и п. 1)

3) Незачем использовать memcpy если Вы уже используете tools высокого уровня (такие как QDataSrtream) которые уже дают результат чтения.