Вообще говоря, порядковый номер имеет значение только в том случае, если ваши данные передаются по какому-либо физическому интерфейсу (например, по сети или в файл), где они могли быть получены с платформы с другим собственным порядком байтов.Это также происходит, если вы пытаетесь делать «умные» вещи с помощью приведения указателя, например, int a = 0xABCD; char b = *(char *)&a;
.
Из вашего примера неясно, откуда исходные данные, но я предполагаю, что они были прочитаны изфайл или где-нибудь.На самом деле, лучшее место для преобразования порядка байтов - это как можно ближе к интерфейсу, поэтому в вашем случае подпрограмма, которая читает файл и заполняет структуру.Как правило, это можно решить с помощью препроцессора #ifdefs, например, в C (я знаю, что это вопрос C ++, но я уверен, что вы можете найти подходящий эквивалент):
#ifdef (LITTLE_ENDIAN)
#define FILE_TO_NATIVE_16(x) ((((x) & 0xFF) << 8) | ((x) >> 8))
#else
#define FILE_TO_NATIVE_16(x) (x)
#endif
и так далее.
Если вы изолируете преобразование в подпрограммы интерфейса, остальная часть вашего кода становится независимой от порядка байтов.