Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/65: Рейтинг темы: голосов - 65, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 22
1

Преобразовать int в QByteArray

01.03.2015, 23:12. Показов 13412. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем необходимо число int преобразовать в массив байтов QByteArray:
пока делаю так:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
int valueRange; //задаем valueRange 
 
char a = ( valueRange >> 24 )& 0xFF;
char b = ( valueRange >> 16 )& 0xFF;
char c = ( valueRange >> 8 )& 0xFF;
char d = valueRange & 0xFF;
 
byte->append(a);
byte->append(b);
byte->append(c);
byte->append(d);
 
qDebug() << " val:" << valueRange << " = " << (int)a <<"*"<<(int)b<<"*"<<(int)c<<"*"<<(int)d;
Но вроде что-то не так, например выводит для разных valueRange :

val: -291 = -1 * -1 * -2 * -35
val: -141 = -1 * -1 * -1 * 115
val: -200 = -1 * -1 * -1 * 56
val: 105 = 0 * 0 * 0 * 105


Как то не правильно вроде работает.

Возможно есть какой-то стандартный способ? это же Qt.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2015, 23:12
Ответы с готовыми решениями:

QByteArray в int
Привет всем! Ситуация такая: с контроллера через COM передаю unsigned long int ловлю в Qt...

Перевести QByteArray в int
Нужно перевести QByteArray в int такой вариант не подходит: QByteArray bayt; int podschet; ...

Рефакторинг из QByteArray в int и наоборот
Подскажите как можно лучше перевести четыре байта в int, с помощью функций Qt, сейчас я делаю так:...

Запись signed short int в QByteArray
Добрый день! после долгого поиска в тырнетике, я так и не нашла ответ на мой вопрос( хочется...

3
Linux-оид
120 / 69 / 9
Регистрация: 15.02.2011
Сообщений: 374
02.03.2015, 01:06 2
Конструкторы QByteArray не принимают чистый int.

- QByteArray & append(const QByteArray & ba)
- QByteArray & append(const QString & str)
- QByteArray & append(const char * str)
- QByteArray & append(const char * str, int len)
- QByteArray & append(char ch)

QByteArray QByteArray::number(int n, int base = 10)
Returns a byte array containing the string equivalent of the number n to base base (10 by default)


C++ (Qt)
1
2
int n = 777;
qDebug()<<QByteArray::number(n);
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
02.03.2015, 01:32 3
Цитата Сообщение от mrZurg Посмотреть сообщение
Но вроде что-то не так, например выводит для разных valueRange :
val: -291 = -1 * -1 * -2 * -35
val: -141 = -1 * -1 * -1 * 115
val: -200 = -1 * -1 * -1 * 56
val: 105 = 0 * 0 * 0 * 105
Как то не правильно вроде работает.
Почему? Всё правильно.
(uint)(-291) = 0xFFFFFEDD
(unsigned char)(-1) = 0xFF
(unsigned char)(-2) = 0xFE
(unsigned char)(-35) = 0xDD
Никаких противоречий не вижу. Замечание только в том, что в QByteArray вы записываете с порядком байт big-endian (вначале старшие байты, потом младшие). Но в x86 процессорах используется little-endian (вначале младшие, потом старшие). Но всё зависит от задачи... если это будет записываться в файл или передаваться по сети, где требуется именно big-endian, то всё правильно.

Можно сделать по другому:
C++ (Qt)
1
2
QByteArray byte(sizeof(int), 0);
*((int*)byte.data()) = valueRange;
Тут порядок байт будет такой же, как используется процессором... например, x86 процессоры будут записывать в little-endian. Этот способ всё записывает за одну операцию и работает быстрее, чем несколько append'ов с предварительными сдвигами. Хотя, разница в скорости может быть заметна только в огромных циклах, где требуется постоянно выполнять подобные операции.
1
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
02.03.2015, 17:43 4
есть метод
C++ (Qt)
1
QByteArray::fromRawData((char*)valueRange,sizeof(valueRange));
0
02.03.2015, 17:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2015, 17:43
Помогаю со студенческими работами здесь

Как преобразовать QString в QByteArray?
как преобразовать QString в QByteArray?

Перевод Int/FLoat -> QByteArray -> Int/Float
Есть задача переводить float/int данные в бинарный вид и обратно (в последующем для передачи по...

error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int"
Добрый вечер! Прошу помочь, так как сам только начал изучать СПП (поэтому отнеситесь с...

Ошибка error C2440: инициализация: невозможно преобразовать 'int' в 'int []'
// ConsoleApplication9.cpp: определяет точку входа для консольного приложения. // #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru