Russian Qt Forum

Qt => Вопросы новичков => Тема начата: YvenTitan от Январь 20, 2017, 17:11



Название: QByteArray to Int без QDataStream
Отправлено: YvenTitan от Январь 20, 2017, 17:11
Здравствуйте
Можете подсказать, как QByteArray преобразовать в Int без использования QDataStream.
Мне сказали, что через QDataStream работает медленнее. Это правда?


Название: Re: QByteArray to Int без QDataStream
Отправлено: Авварон от Январь 20, 2017, 17:12
Код:
T qFromBigEndian(const void *src);
T qFromLittleEndian(const void *src);


Название: Re: QByteArray to Int без QDataStream
Отправлено: YvenTitan от Январь 20, 2017, 17:32
Спасибо


Название: Re: QByteArray to Int без QDataStream
Отправлено: YvenTitan от Январь 20, 2017, 18:09
Делаю так
quint16 num = qFromLittleEndian<quint16>((uchar*)ba.data());
Все работает. Можете подсказать, а если число начинается, к примеру, с третьего байта(третий и четвертые байты QByteArray), то как преобразовать?
Хотелось бы без копирования двух байт в отдельный массив


Название: Re: QByteArray to Int без QDataStream
Отправлено: Пантер от Январь 20, 2017, 20:03
Код
C++ (Qt)
qFromLittleEndian<quint16>(reinterpret_cast<const uchar*> (ba.data() + 2));
 


Название: Re: QByteArray to Int без QDataStream
Отправлено: YvenTitan от Январь 25, 2017, 11:02
Спасибо
А если надо из QByteArray в тип float, то можно через qFromLittleEndian?
qFromLittleEndian<float>(reinterpret_cast<const uchar*> (ba.data() + 2));
так пишет "underfined references to 'float qFromLittleEndian<float>(unsigned char const*)'"


Название: Re: QByteArray to Int без QDataStream
Отправлено: kuzulis от Январь 25, 2017, 11:09
Используй QDataStream и не мучайся.


Название: Re: QByteArray to Int без QDataStream
Отправлено: Пантер от Январь 25, 2017, 11:11
У меня работает. Посмотри в исходниках Qt есть ли спецификация qFromLittleEndian для float.