Перестановка порядков байтов без ntohs

Я пишу анализатор ELF, но у меня возникли проблемы с правильным преобразованием порядка следования байтов. У меня есть функции для определения порядка следования байтов анализатора и порядка следования байтов объектного файла.

По сути, существует четыре возможных сценария.:

  1. Анализатор, скомпилированный с прямым порядком байтов, запускает объектный файл с обратным порядком байтов.
    • ничего не нужно преобразовывать
  2. Анализатор, скомпилированный с прямым порядком байтов, работает с объектным файлом с прямым порядком байтов
    • порядок байтов необходимо поменять местами, но ntohs/l ()и htons/l ()являются нулевыми макросами на машине с обратным порядком байтов, поэтому они не меняют порядок байтов.Вот в чем проблема.
  3. Анализатор, скомпилированный с прямым порядком байтов, запускает объектный файл с прямым порядком байтов.
    • порядок байтов необходимо поменять местами, поэтому используйте htons ()для изменения порядка байтов.
  4. Скомпилированный анализатор с прямым порядком байтов работает с объектным файлом с прямым порядком байтов.
    • ничего не нужно преобразовывать

Есть ли функция, которую я могу использовать для явного переключения порядка следования байтов/изменения порядка байтов, поскольку ntohs/l ()и htons/l ()учитывают порядок следования байтов хоста, а иногда и нет? конвертировать? Или мне нужно найти/написать свою собственную функцию порядка байтов подкачки?

9
задан xdumaine 26 April 2012 в 21:09
поделиться