2014-11-14 1 views
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 

импульс перешел заколдовать только размер буфера?

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

Итак, что произойдет, если я переключу число от 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, то truncs нулю :(

что является рекомендуемое решение этой

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

EDIT:. образец serializat Функция ионного

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 является просто оболочкой на символ * с первым элементом без знака INT , чтобы сохранить длину, аппроксимирующим UNICODE_STRING

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

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

+0

Вы должны показать код, который выполняет сериализацию. – Steve

+0

Отредактируйте сообщение и разместите там код. Удостоверьтесь, что он имеет отступы в четыре пробела и должен также выделяться синтаксис. Это облегчит людям чтение и, скорее всего, поможет людям. – Steve

+0

Вот так вот Стив. –

ответ

0

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

0

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

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

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

Смежные вопросы