Safe C строит сериализацию для отправки по сетям?- C ++ - PullRequest
1 голос
/ 17 января 2011

Как бы кто-нибудь пошёл на сериализацию структур в стиле C независимо от порядка байтов процессора?

Я искал решения, но надеялся на более общее решение проблемы, а не на изменение байтапорядок каждого поля в структуре.

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Нет общего решения этой проблемы в языке (или общих системных библиотеках).

(Могут быть скрипты / инструменты, которые могут автоматически генерировать код для чтения / записи для вас, или библиотеки, которые могут добавить своего рода «отражение» в ваши структуры, но у меня нет ссылок для вас.)

Дополнительная информация, которая должна быть в любом хорошем ответе на этот вопрос: В дополнение к порядку байтов убедитесь, что вы используете директивы компилятора, чтобы зафиксировать упаковку структуры в памяти для выравнивания байтов (что является нормальным для сетипакеты) вместо естественного выравнивания полей структуры.

1 голос
/ 17 января 2011

Если вам нужен бинарный поток, вам придется иметь дело с сопутствующими проблемами, в том числе с порядком байтов. Ради представления альтернативы вы можете создать удобочитаемое / ASCII-представление полей - которое стремится избежать многих ловушек, но часто является более многословным и менее производительным. В любом случае, создание функций при наличии большого количества структур / полей представляет собой небольшую боль. Вы можете рассмотреть возможность генерации кода с использованием сценария поддержки, даже вытесняя его из метаданных из GCC-XML, Open-C ++ (если ваш код C также является допустимой программой на C ++) или аналогичного ....

...