В принципе, вы можете пройти через структуры и вызвать htonl
или htons
на каждом uint32_t
или uint16_t
поле, соответственно, присваивая результаты обратно или копию структура. Однако я бы не рекомендовал такой подход. Он очень хрупок и подвержен проблемам выравнивания структуры и т. Д.
Если данные передачи и приема не являются критическими для производительности, я бы просто применил соответствующие методы сериализации и десериализации для ваших структур. Вы можете писать числовые значения за один байт за раз в двоичном формате, выбирая, хотите ли вы сначала записать наименее значимую или наиболее значимую часть. Но на самом деле, я бы рекомендовал выбрать современный текстовый формат сериализации, такой как json или (uhg, я ненавижу сказать это) xml. Стоимость сериализации и десериализации текста довольно мала, и преимущества с точки зрения легкости и расширяемости отладки значительны.
Наконец, если вы хотите использовать текст, но найти JSON или XML слишком неприятной, слишком тяжелой или слишком много кривой обучения, вы всегда можете просто использовать printf
и scanf
форматирования для чтения и записи структуры как текст в фиксированной заказ. Написание всех числовых значений, включая поплавки, в шестнадцатеричном, а не в десятичном формате, вероятно, немного улучшит производительность и обеспечит точность округления с плавающей точкой. Если у вас нет C99, другой вариант для поплавков может состоять в том, чтобы разложить их на форму мантиссы/экспоненты и перекомпонировать их, используя frexp
и ldexp
.
Вкратце ... если у меня есть структура ..., которая выглядит как эта структура {int a; int arrayx [200]; } mystruct_t; ... может ли это быть чисто байт заменен? – Xofo