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