Russian Qt Forum
Ноябрь 24, 2024, 08:55
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Запись unsigned char в XML
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Запись unsigned char в XML (Прочитано 8357 раз)
Yuriy
Гость
Запись unsigned char в XML
«
:
Сентябрь 01, 2011, 16:56 »
Доброго времени суток!
Есть задача - в файл XML записать изображение предварительного просмотра.
получаю unsigned char * с помощью QImage::bits();
соответственно записываю полученные значения в виде строки
<stroka>132 255 0 12 и т.д.</stroka>
Считывается и записывается изумительно, только вот размер сохраненного XML увеличивается больше чем на размер картинки, аж в 4 раза.
Думаю было бы круто кодировать строку вида 132 255 0 12 в кодировку ASCII string, например ABCDEF и т.д
Посоветуйте, пожалуйста, как лучше сделать, чтобы не шибко увеличивался размер сохраненного XML-файла.
если кодировать, тогда я не набиру 255 символов стандартным набором ASCII, взять заглавные и прописные буквы = 52 символа, + 10 цифр. Итого 62 значения, а требуется 255.
Спасибо, за любую помощь !
Записан
shar
Гость
Re: Запись unsigned char в XML
«
Ответ #1 :
Сентябрь 01, 2011, 17:50 »
Код:
QByteArray::toBase64();
или
Код:
QDataStream & operator<< ( QDataStream & stream, const QImage & image );
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #2 :
Сентябрь 01, 2011, 17:59 »
от base 64 кодирования файл будет еще больше...
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Запись unsigned char в XML
«
Ответ #3 :
Сентябрь 01, 2011, 18:05 »
qCompress, а полученное в base64.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #4 :
Сентябрь 01, 2011, 18:43 »
Млин, просто мозг "заплыл". Получаю вписанное 1:1 изображение:
char(aUnsCharValue);
вот и все.
ANSI как раз от 0 до 255 задается.
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #5 :
Сентябрь 01, 2011, 19:16 »
Теперь пишет 1:1 а считать XML не может. Судя по всему какие-то управляющие символы забиваются. Как их обойти ума не приложу!
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #6 :
Сентябрь 01, 2011, 19:58 »
Unexpected end of file
А какие вообще данные можно в XML закинуть, чтобы он их потом считал, я так понимаю, что в XML много управляющих символов, таких как [, ], <,> и поэтому их нужно избегать при записи.
Я думаю, что я не первый кто пытается записать двоичные данные в XML, при этом с возмоностью их зачитать потом
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Запись unsigned char в XML
«
Ответ #7 :
Сентябрь 01, 2011, 20:00 »
Читай про CDATA и записывай в base64.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Странник
Гость
Re: Запись unsigned char в XML
«
Ответ #8 :
Сентябрь 01, 2011, 20:02 »
Цитата: Yuriy от Сентябрь 01, 2011, 19:16
Теперь пишет 1:1 а считать XML не может. Судя по всему какие-то управляющие символы забиваются. Как их обойти ума не приложу!
XML - текстовый формат, поэтому двоичные данные для хранения необходимо кодировать в Base64. если не устраивает рост размера файла - меняйте формат хранения данных.
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #9 :
Сентябрь 01, 2011, 20:11 »
Двоичный формат тоже подцепил, там то как раз и нет проблем. Просто пишу программу, и хочу чтобы она была как можно более открытой, потому как XML можно будет открыть на любой машине и взять с него что угодно, прикрутить плагины и т.д.. Так вот, нужно знать какие управляющие символы из ANSI XML съедает, а какие примет как текст и собрать строку. типа abCfDDFf 137 sdfdf 17 , где 137 и 17 - символы недопустимые для текстовой строки.
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #10 :
Сентябрь 01, 2011, 21:40 »
Наткнулся на такую тему:
http://wladm.narod.ru/C_Sharp/xml003.html
Только непонятно как получить формат X2 строки.
Записан
Странник
Гость
Re: Запись unsigned char в XML
«
Ответ #11 :
Сентябрь 02, 2011, 08:25 »
зачем сооружать велосипед с бесплатным геморроем из материала заказчика, если есть типовые решения? = ) Base64-кодирование увеличит размер картинки на треть, что в вашем случае совершенно не критично. и открытость увеличится - в дебри вашей системы кодирования никому вникать не придется.
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Запись unsigned char в XML
«
Ответ #12 :
Сентябрь 02, 2011, 11:31 »
можно переводить каждый бай в hex.
Записан
Yuriy
Гость
Re: Запись unsigned char в XML
«
Ответ #13 :
Сентябрь 02, 2011, 14:06 »
Ок, только 1 к 1 все равно не получится. Сейчас уже получше 1:2:
std::string aValueStr;
for (; i <= upper; i++)
{
char s[33];
itoa(array->Value(i),s,16);
std::string aValue(s);
if (strlen(s) == 1) aValue = ' '+aValue;
aValueStr += aValue;
}
соответственно получаем строку вида:
>89504e47 d a1a a 0 0 0 d49484452 0 0 1f9 0 0 ...
а раньше она была бы:
>137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 ...
А для считывания:
for (unsigned int i = 0; i < strlen(aValueStr)/2; ++i)
{
char * ptr;
aValue = strtol (aStrValue.c_str(), &ptr, 16);
array->SetValue(i+array->Lower(), aValue);
}
Итого получаем экономию 100%% и считывание из любого плагина, написанного на ассемблере
Записан
Странник
Гость
Re: Запись unsigned char в XML
«
Ответ #14 :
Сентябрь 02, 2011, 15:21 »
майн готт. HEX-кодирование и даст 1:2. или вам кажется, что 1:2 лучше, чем 3:4? % )
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...