Russian Qt Forum
Ноябрь 24, 2024, 08:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray to Int без QDataStream  (Прочитано 6678 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Январь 20, 2017, 17:11 »

Здравствуйте
Можете подсказать, как QByteArray преобразовать в Int без использования QDataStream.
Мне сказали, что через QDataStream работает медленнее. Это правда?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Январь 20, 2017, 17:12 »

Код:
T qFromBigEndian(const void *src);
T qFromLittleEndian(const void *src);
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #2 : Январь 20, 2017, 17:32 »

Спасибо
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #3 : Январь 20, 2017, 18:09 »

Делаю так
quint16 num = qFromLittleEndian<quint16>((uchar*)ba.data());
Все работает. Можете подсказать, а если число начинается, к примеру, с третьего байта(третий и четвертые байты QByteArray), то как преобразовать?
Хотелось бы без копирования двух байт в отдельный массив
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Январь 20, 2017, 20:03 »

Код
C++ (Qt)
qFromLittleEndian<quint16>(reinterpret_cast<const uchar*> (ba.data() + 2));
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #5 : Январь 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*)'"
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Январь 25, 2017, 11:09 »

Используй QDataStream и не мучайся.
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Январь 25, 2017, 11:11 »

У меня работает. Посмотри в исходниках Qt есть ли спецификация qFromLittleEndian для float.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 22.