Шаг 61.
Библиотека Qt.
Массив байтов 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 сжать.

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим массив битов QBitArray.




Предыдущий шаг Содержание Следующий шаг