повысить сериализацию шестнадцатеричного десятичного кодирования данных

0

Я новичок в расширении сериализации, но это кажется мне очень странным.

У меня очень простой класс с двумя членами

int number // always = 123

char buffer[?] // buffer with ? size

поэтому иногда я устанавливаю размер в buffer[31] затем я сериализую класс

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 31 0 0 0 65 65

мы можем видеть 123 и 31 поэтому проблема здесь не в десятичном формате.

теперь я меняю буфер на buffer[1024] поэтому я ожидал увидеть

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 1024 0 0 0 65 65 ---

это фактический результат

22 serialization::archive 8 0 0 1 1 0 0 0 0 123 0 0 0 4 0 0 65 65 65

boost переключился на hex только для размера буфера?

обратите внимание, что другое значение все равно десятичное.

Итак, что произойдет, если я переключу число от 123 до 1024?

Я мог бы представить себе 040?

22 serialization::archive 8 0 0 1 1 0 0 0 0 1024 0 0 0 4 0 0 65 65

Если это по дизайну, почему 31 не преобразуется в 1F? его непротиворечивость.

Это вызывает проблемы в нашей функции загрузки для split_free, мы делали это

unsigned int size;
ar >> size; 

но, как вы могли догадаться, когда это 040, он уходит в ноль :(

каково рекомендуемое решение этого?

Я использовал boost 1.45.0, но я тестировал это на boost 1_56.0, и это то же самое.

EDIT: образец функции сериализации

template<class Archive>
void save(Archive& ar, const MYCLASS& buffer, unsigned int /*version*/) {
    ar << boost::serialization::make_array(reinterpret_cast<const unsigned char*>(buffer.begin()), buffer.length());
}

MYCLASS - это всего лишь оболочка на char * с первым элементом unsigned int, чтобы сохранить длину, приближающуюся к UNICODE_STRING

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa380518(v=vs.85).aspx

Код тот же, если длина равна 1024 или 31, поэтому я не ожидал, что это будет проблемой.

  • 0
    Вы должны показать код, который выполняет сериализацию.
  • 0
    Отредактируйте свой пост и разместите этот код там. Удостоверьтесь, что это отступ с четырьмя пробелами и должен быть выделен синтаксис. Людям будет легче читать, и людям будет легче помочь.
Показать ещё 4 комментария
Теги:
boost
boost-serialization

2 ответа

0
Лучший ответ

Я не думаю, что Boost "переключился на гекс". Я честно не имею никакого опыта с этим, но похоже, что boost сериализуется как массив байтов, который может содержать только числа от 0 до 255. 1024 будет байтом со значением 4, за которым следует байт со значением 0.

0

"почему 31 не преобразуется в 1F? его несовместимо" - ваши предположения создают ложные несоответствия. Прекратите предполагать, что вы можете прочитать формат архива сериализации, когда на самом деле вы просто гадаете.

Если вы хотите узнать, проследите код. Если нет, просто используйте формат архива.

Если вы хотите "доступную человеку форму", рассмотрите xml_oarchive.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню