Russian Qt Forum
Май 18, 2012, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QByteArray  (Прочитано 1033 раз)
akaMDA
Чайник
*
Offline Offline

Сообщений: 94


« : Ноябрь 15, 2011, 16:49 »

Как добавить в объект класса QByteArray многобайтовое число, при этом не используя потоки?
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #1 : Ноябрь 15, 2011, 16:56 »

http://doc.qt.nokia.com/stable/qbytearray.html#append-4
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 1880



« Ответ #2 : Ноябрь 15, 2011, 16:58 »

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

Qt 4.7.4 (X11/Win)
akaMDA
Чайник
*
Offline Offline

Сообщений: 94


« Ответ #3 : Ноябрь 16, 2011, 08:20 »

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

Сообщений: 108


« Ответ #4 : Ноябрь 16, 2011, 08:28 »

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

QByteArray ba (xx, 8);
Записан
akaMDA
Чайник
*
Offline Offline

Сообщений: 94


« Ответ #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
Чайник
*
Offline Offline

Сообщений: 79


« Ответ #6 : Ноябрь 16, 2011, 09:05 »

Либа так:

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


Записан

Qt 4.4.3 feat MSVC 2005
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 1880



« Ответ #7 : Ноябрь 16, 2011, 09:49 »

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

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

Сообщений: 1880



« Ответ #8 : Ноябрь 16, 2011, 09:52 »

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

Qt 4.7.4 (X11/Win)
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #9 : Ноябрь 16, 2011, 13:15 »

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

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
akaMDA
Чайник
*
Offline Offline

Сообщений: 94


« Ответ #10 : Ноябрь 16, 2011, 13:32 »

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

Сообщений: 1880



« Ответ #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 4.7.4 (X11/Win)
akaMDA
Чайник
*
Offline Offline

Сообщений: 94


« Ответ #12 : Ноябрь 16, 2011, 15:04 »

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

Сообщений: 4122


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


« Ответ #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

Сообщений: 1880



« Ответ #14 : Ноябрь 16, 2011, 15:30 »

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

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

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