Я пишу программу на Linux в C для анализа основных файлов, созданных из встроенной системы. Основные файлы могут быть немного endian (ARM) или большой endian (MIPS), а программа для их анализа может работать на небольшом endian-хосте (x86) или большом endian (PowerPC).
Посмотрев на заголовки, я знаю, является ли ядро LE или BE. Я бы предпочел, чтобы моя программа не нуждалась в том, что хост, на котором он работает, немного или большой, я бы хотел использовать API для его обработки. Если нет лучшего варианта, я думаю, я начну полагаться на #ifdef __BIG_ENDIAN __.
В ядре Linux у нас есть cpu_to_le32 и др., чтобы преобразовать из собственного байтового порядка в little endian и т.д. В пользовательском пространстве есть htonl et al, которые преобразуются из native в большой endian, но не имеют эквивалента для native little endian, что я может найти.
Можно ли предложить подходящий API для пользовательского пространства?
Изменить. Чтобы быть ясным, я ищу API, который уже знает, большой ли мой процессор или маленький конец, и соответственно свопы. Я не хочу, чтобы это заставляло мой код #ifdefs. Я не просто ищу фрагменты кода для обмена байтами; спасибо вам, но это не главное.