Массив байтов QByteArray

   
На этом шаге рассмотрим массив байтов QByteArray.

   
Этот класс очень похож на QVector<T>, но разница заключается в том, что это не шаблонный класс, и в нем допускается хранение только элементов, имеющих размер один байт. Объекты типа QByteArray можно использовать везде, где требуется промежуточное хранение данных. Количество элементов массива можно задать в конструкторе, а доступ к ним получать при помощи оператора []:

QByteArray arr(3);
arr[0] = arr[1] = 0xFF;
arr[2] = 0x0;

   
К данным объектов класса QByteArray можно также применять операцию сжатия и обратное преобразование. Это достигается при помощи двух глобальных функций: qCompress() и qUncompress(). Просто сожмем и разожмем данные:

QByteArray a = "Данные";
QByteArray aCompressed = qCompress(a);
qDebug() << qUncompress(aCompressed);

   
На экране появится "Данные".

   
Случается, что нужно преобразовывать бинарные данные в текстовые. Например, вам нужно записать растровое изображение в текст XML-файла. Класс QByteArray предоставляет для этих целей два метода: toBase64() и fromBase64(). Из названий методов видно, что бинарные данные будут преобразовываться в формат Base64. Этот формат был специально разработан для передачи бинарных данных в текстовой форме. Приведем небольшой пример, а для того чтобы проводимые преобразования были понятны, мы применим их к обычной строке текста:

QByteArray a = "Example";
QByteArray aBase64 = a.toBase64();
qDebug() << aBase64;

   
На экране мы увидим (рис.1)


Рис.1. Результат преобразования в формат Base64

   
Теперь проведем обратное преобразование при помощи статического метода fromBase64():

qDebug() << QByteArray::fromBase64(aBase64);

   
На экране появится (рис.2):


Рис.2. Результат выполнения обратного преобразования

   
Чтобы бинарные данные занимали меньше места в текстовом файле, их можно перед кодированием в Base64 сжать.

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий