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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Запись unsigned char в XML  (Прочитано 8342 раз)
Yuriy
Гость
« Ответ #15 : Сентябрь 02, 2011, 19:03 »

Вот результаты:

Image size: 15 384
 XML without image: 104 332
 XML with image no encoding: 159 624
 XML with image encoded with FF: 139 264
 XML with image encoded with base: 178 011 (!)
 XML with image encoded with default ANSI string: 124 116

Только вот ANSI стринг также содержит ряд управляющих символов... Если бы убрать разделители пробелом, только вот непонятна длина символа, сейчас я строю
3t28261z d a q a 0 0 0 d21201
и анализирую по два символа, а без пробелов реально обойтись Непонимающий
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #16 : Сентябрь 05, 2011, 15:09 »

Код:
std::string aValueStr;
char s[34];
char append[3];
  for (; i <= upper; i++)
  {
      itoa(array->Value(i),s,16);
      sprintf(append,"%02s",s);
      aValueStr += append;
  }
получишь результат вида
002АFFB0... т.е. проблема с управляющими символами решена, но размер файла будет ровно в 2 раза больше чем размер картинки в байтах.
« Последнее редактирование: Сентябрь 05, 2011, 15:10 от Fregloin » Записан
Странник
Гость
« Ответ #17 : Сентябрь 05, 2011, 15:34 »

Вот результаты:

Image size: 15 384
 XML without image: 104 332
 XML with image no encoding: 159 624
 XML with image encoded with FF: 139 264
 XML with image encoded with base: 178 011 (!)
 XML with image encoded with default ANSI string: 124 116
с реализацией кодирования у вас явно беда. HEX всей картинки должно было дать 135 100, а BASE64 всей картинки ~124 844.
Записан
Yuriy
Гость
« Ответ #18 : Сентябрь 06, 2011, 17:04 »

Спасибо, Fregloin

Еще проще без itoa, потому как в Linux его к сожалению нет, а городить его не хотелось бы....

  std::string aValueStr;

  char append[2];

  for (; i <= upper; i++)
  {
      sprintf(append,"%02x",array->Value(i));
      aValueStr += append;
  }

XmlObjMgt::SetStringValue (theTarget, aValueStr.c_str(), Standard_True);

теперь вод думаю, как сделать это без использования std::string. Копировать char в char* или все-таки оставить std::string?
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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