На этом шаге рассмотрим массив байтов 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.