Функция библиотеки C для преобразования двоичного массива байтов в целое число с различными преобразованиями - PullRequest
4 голосов
/ 20 мая 2011

Существует ли набор библиотечных функций C (или не-библиотечных функций, собранных где-нибудь), которые позволяют преобразовывать данные байтового массива в целые числа с различными преобразованиями (данные с прямым порядком байтов, данные с прямым порядком байтов, подпись одного дополнения, дополнение двух)подписи и так далее), принимая во внимание собственный порядок машин?

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 мая 2011

Это близко, хотя я не думаю, что это будет обрабатывать дополнение против дополнения двух. Вы можете добавить это. http://code.google.com/p/protobuf-c/

0 голосов
/ 02 марта 2015

Как я понимаю, вы пытаетесь получить однозначный BIG_ENDIAN (или LITTLE_ENDIAN) номер, не обязательно зная, какова ваша текущая конвенция хоста.Это должно быть возможно.

Насколько я понимаю, условно "сетевой порядок байтов" всегда BIG_ENDIAN.Таким образом, вы можете позвонить htonx (), тогда вы знаете, что это BIG_ENDIAN.Затем, если вы хотите LITTLE_ENDIAN, вы можете вручную транспонировать байты в своем собственном коде.Результатом должны быть ваши собственные функции toBigEndian () или toLittleEndian ().

Часть вопроса, дополняющая 2, не допускает одно и то же, поскольку это полностью вопрос соглашения.Скажем, это число длиной два байта - почти каждая комбинация 16-битных значений является как действительным номером дополнения 1, так и действительным номером дополнения 2.«Правильное» значение полностью зависит от интерпретации, которая была наложена на него кодом, который записал это значение.

...