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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QByteArray  (Прочитано 9693 раз)
akaMDA
Гость
« : Ноябрь 15, 2011, 16:49 »

Как добавить в объект класса QByteArray многобайтовое число, при этом не используя потоки?
Записан
andrew.k
Гость
« Ответ #1 : Ноябрь 15, 2011, 16:56 »

http://doc.qt.nokia.com/stable/qbytearray.html#append-4
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Ноябрь 15, 2011, 16:58 »

Код
C++ (Qt)
QByteArray::append( QByteArray::fromRawData( ... ) )
Записан

Qt 5.11/4.8.7 (X11/Win)
akaMDA
Гость
« Ответ #3 : Ноябрь 16, 2011, 08:20 »

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

Код:
quint64 x;
..............................
const char* xx = (char**)(&x);

QByteArray ba (xx, 8);
Записан
akaMDA
Гость
« Ответ #5 : Ноябрь 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);
Записан
Waryable
Гость
« Ответ #6 : Ноябрь 16, 2011, 09:05 »

Либа так:

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


Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Ноябрь 16, 2011, 09:49 »

Ну да, спасибо) работает в таком виде, может кому позже пригодится:
Навряд ли, т.к. не зачем для такой ерунды аллакировать память в куче и присваивать по-байтно.
Записан

Qt 5.11/4.8.7 (X11/Win)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Ноябрь 16, 2011, 09:52 »

Либа так:
Интересно, откуда QByteArray возьмёт 8 байт?
Записан

Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
« Ответ #9 : Ноябрь 16, 2011, 13:15 »

Либа так:
Интересно, откуда QByteArray возьмёт 8 байт?
От какого-нибудь соседнего класса, делов то. )
Записан
akaMDA
Гость
« Ответ #10 : Ноябрь 16, 2011, 13:32 »

Ну да, спасибо) работает в таком виде, может кому позже пригодится:
Навряд ли, т.к. не зачем для такой ерунды аллакировать память в куче и присваивать по-байтно.
Тогда напишите пожалуйста кошерную тру версию, как должно быть))
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Ноябрь 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() ) );
 
Записан

Qt 5.11/4.8.7 (X11/Win)
akaMDA
Гость
« Ответ #12 : Ноябрь 16, 2011, 15:04 »

Спасибо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #13 : Ноябрь 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() ) );
 
Улыбающийся
Записан

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

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Ноябрь 16, 2011, 15:30 »

Маленькое дополнение:
Я бы не спешил добавлять такое дополнение "в кошерную тру версию", т.к. typeof вроде как нет в стандарте Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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