Как я понимаю, вы пытаетесь получить однозначный BIG_ENDIAN (или LITTLE_ENDIAN) номер, не обязательно зная, какова ваша текущая конвенция хоста.Это должно быть возможно.
Насколько я понимаю, условно "сетевой порядок байтов" всегда BIG_ENDIAN.Таким образом, вы можете позвонить htonx (), тогда вы знаете, что это BIG_ENDIAN.Затем, если вы хотите LITTLE_ENDIAN, вы можете вручную транспонировать байты в своем собственном коде.Результатом должны быть ваши собственные функции toBigEndian () или toLittleEndian ().
Часть вопроса, дополняющая 2, не допускает одно и то же, поскольку это полностью вопрос соглашения.Скажем, это число длиной два байта - почти каждая комбинация 16-битных значений является как действительным номером дополнения 1, так и действительным номером дополнения 2.«Правильное» значение полностью зависит от интерпретации, которая была наложена на него кодом, который записал это значение.