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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сжатие строки с помощью qCompres  (Прочитано 3771 раз)
giker
Гость
« : Февраль 09, 2011, 08:59 »

Всем доброго дня. Нужно сжать сроку с помощю qCompress. Пишу такой код:
Код:
QByteArray asc = string.toAscii();
QByteArray compressed = qCompress(asc, 9);
QString tmp = QString(compressed);

но tmp = "".
Объясните пожалуйста почему? Насколько я понимаю там должна быть последовательность каких-то символов, которые получены в результате сжатия строки. Само-собой string != "".
Как правильно сжать строку?
Спасибо.
Записан
Странник
Гость
« Ответ #1 : Февраль 09, 2011, 09:17 »

ты все сжимаешь правильно. но есть одно но - после сжатия ты получаешь бинарные, а не текстовые данные, поэтому нельзя просто засунуть их в QString. используй QByteArray для хранения и передачи сжатых данных, а в QString их преобразовывай только после декомпрессии. если же есть необходимость передачи бинарных данных в текстовом виде (например, XML) - можно использовать такой вариант:
Код:
QString tmp = QString(qCompress(string.toAscii(), 9).toBase64()); //сжатая строка в кодировке Base64

string = QString(qUncompress(QByteArray::fromBase64(tmp.toLatin1()))); //исходная строка
« Последнее редактирование: Февраль 09, 2011, 09:41 от Странник » Записан
giker
Гость
« Ответ #2 : Февраль 09, 2011, 10:28 »

Спасибо Странник, то что нужно  Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Февраль 09, 2011, 11:40 »

Цитата: giker
но tmp = "".
[режим разжевывания азов]
Как уже было сказано выше - это случилось потому, что значение первого байта в сжатых данных скорее всего получилось == 0, поэтому при добавлении в QString этого массива (с первым нулём) - вышел размер строки  == 0.
А всё потому, что строки заканчиваются '\0' !!!
Вот если бы в сжатом массиве нулю равнялся второй байт - то при добавлении в QString - оно бы показало длину строки в 1 байт!  Подмигивающий
[/режим разжевывания азов]
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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