В принципе, вы можете пройти через структуру и вызвать htonl
или htons
в каждом поле uint32_t
или uint16_t
соответственно, присваивая результаты обратно или копии структуры.Однако я бы не рекомендовал такой подход.Он очень хрупкий и подвержен проблемам со структурным выравниванием и т. Д.
Если передача и получение данных не являются критически важными для производительности, я бы просто внедрил подходящие методы сериализации и десериализации для ваших структур.Вы можете записывать числовые значения по одному байту за раз в двоичном формате, выбирая, хотите ли вы записать сначала в наименее значимую или наиболее значимую часть.Но на самом деле, я бы порекомендовал выбрать современный текстовый формат сериализации, такой как json или (э-э, я не хочу это говорить) xml.Стоимость сериализации и десериализации текста довольно мала, а преимущества с точки зрения простоты отладки и расширяемости значительны.
Наконец, если вы хотите использовать текст, но находите json или xml слишком неприятными, слишком тяжелыми илислишком много кривой обучения, вы всегда можете просто использовать форматирование printf
и scanf
для чтения и записи структур в виде текста в фиксированном порядке.Запись всех числовых значений, включая числа с плавающей запятой, в шестнадцатеричном, а не десятичном виде, вероятно, немного повысит производительность и обеспечит точность обработки значений с плавающей запятой в обоих направлениях.Если у вас нет C99, другой вариант для чисел с плавающей запятой может состоять в том, чтобы разложить их в форму мантиссы / экспоненты и перекомпоновать их, используя frexp
и ldexp
.