Russian Qt Forum

Qt => Общие вопросы => Тема начата: akaMDA от Ноябрь 15, 2011, 16:49



Название: QByteArray
Отправлено: akaMDA от Ноябрь 15, 2011, 16:49
Как добавить в объект класса QByteArray многобайтовое число, при этом не используя потоки?


Название: Re: QByteArray
Отправлено: andrew.k от Ноябрь 15, 2011, 16:56
http://doc.qt.nokia.com/stable/qbytearray.html#append-4


Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 15, 2011, 16:58
Код
C++ (Qt)
QByteArray::append( QByteArray::fromRawData( ... ) )


Название: Re: QByteArray
Отправлено: akaMDA от Ноябрь 16, 2011, 08:20
Данные функции работает с ASCII-кодами, а мне надо вставить число типа quint64 в начало (0-7 байты) объекта типа QByteArray. При этом не ASCII коды коды цифр это числа, а реально содержащиеся биты. Потом считать их. Как это реализовать?


Название: Re: QByteArray
Отправлено: ddrtn от Ноябрь 16, 2011, 08:28
Код:
quint64 x;
..............................
const char* xx = (char**)(&x);

QByteArray ba (xx, 8);


Название: Re: QByteArray
Отправлено: akaMDA от Ноябрь 16, 2011, 09:01
Ну да, спасибо) работает в таком виде, может кому позже пригодится:

Код:
    quint64 b = 123456789;

    char* xx = new char[8];

    xx = (char*)(&b);

    QByteArray ba(xx, 8);

    char* x1 = new char[8];

    x1[0] = ba[0];
    x1[1] = ba[1];
    x1[2] = ba[2];
    x1[3] = ba[3];
    x1[4] = ba[4];
    x1[5] = ba[5];
    x1[6] = ba[6];
    x1[7] = ba[7];

    quint64* a = new quint64;

    a = (quint64*)(x1);


Название: Re: QByteArray
Отправлено: Waryable от Ноябрь 16, 2011, 09:05
Либа так:

Код
C++ (Qt)
qint64 iVal;
QbyteArray ba;
char* pBA = ba.data();
 
memset(pBA, &iVal, 8);
 
// memset(pBA+seek, &iVal, 8);
 
В комментарии можно еще и со смещением записать. Но это так сказать легкий хак. Не рекомендуется обычно.




Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 16, 2011, 09:49
Ну да, спасибо) работает в таком виде, может кому позже пригодится:
Навряд ли, т.к. не зачем для такой ерунды аллакировать память в куче и присваивать по-байтно.


Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 16, 2011, 09:52
Либа так:
Интересно, откуда QByteArray возьмёт 8 байт?


Название: Re: QByteArray
Отправлено: andrew.k от Ноябрь 16, 2011, 13:15
Либа так:
Интересно, откуда QByteArray возьмёт 8 байт?
От какого-нибудь соседнего класса, делов то. )


Название: Re: QByteArray
Отправлено: akaMDA от Ноябрь 16, 2011, 13:32
Ну да, спасибо) работает в таком виде, может кому позже пригодится:
Навряд ли, т.к. не зачем для такой ерунды аллакировать память в куче и присваивать по-байтно.
Тогда напишите пожалуйста кошерную тру версию, как должно быть))


Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 16, 2011, 15:01
Тогда напишите пожалуйста кошерную тру версию, как должно быть))
Код
C++ (Qt)
quint64 b = 123456789;
QByteArray ba;
 
ba.append( reinterpret_cast< const char* >( &b ), sizeof( b ) );
 
b = *( reinterpret_cast< const quint64* >( ba.data() ) );
 


Название: Re: QByteArray
Отправлено: akaMDA от Ноябрь 16, 2011, 15:04
Спасибо!


Название: Re: QByteArray
Отправлено: Пантер от Ноябрь 16, 2011, 15:07
Маленькое дополнение:
Код
C++ (Qt)
quint64 b = 123456789;
QByteArray ba;
 
ba.append( reinterpret_cast< const char* >( &b ), sizeof( b ) );
 
b = *( reinterpret_cast< const typeof (b)* >( ba.data() ) );
 
:)


Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 16, 2011, 15:30
Маленькое дополнение:
Я бы не спешил добавлять такое дополнение "в кошерную тру версию", т.к. typeof вроде как нет в стандарте :)


Название: Re: QByteArray
Отправлено: Пантер от Ноябрь 16, 2011, 15:32
Мда, спасибо, про это забыл. Зато было бы красиво. :)


Название: Re: QByteArray
Отправлено: Авварон от Ноябрь 17, 2011, 18:17
А про эндианнес все забыли?


Название: Re: QByteArray
Отправлено: GreatSnake от Ноябрь 17, 2011, 20:36
А про эндианнес все забыли?
Да, забыли. Но, на самом деле не известно, нужна ли ТС сериализация)