Преобразование массива в Int - PullRequest
0 голосов
/ 18 апреля 2019

работает над новым проектом и столкнулся с проблемой. Я получил кусок байтов в массиве символов. В Big Endian есть 4 байта, которые мне нужно преобразовать в int. Когда я пытаюсь преобразовать из 4-байтового массива char в int byte byte byte byte, один из них оказывается в отрицательной форме. Какие-либо решения / алгоритмы?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Сетевой код?Вот для чего ntohl и htonl.Эти функции преобразуют между прямым и прямым порядком байтов.

Чтобы прочитать целое число:

 int value = (int) ntohl(*(int32_t *)(buffer + offset));

Чтобы написать целое число:

 *((int32_t *)(buffer + offset)) = htonl((int32_t)value);
0 голосов
/ 18 апреля 2019

Вы можете использовать atoi для преобразования вашего массива.

Атой человек

Чтобы использовать atoi, ваш массив должен заканчиваться на "\ 0", но вы можете сделать:

  • strncpy для копирования n байтов во временный буфер.
  • добавить «\ 0» в конец буфера tmp.
  • использовать atoi для этого временного буфера.

Вы можете повторить вышеуказанные действия внутри цикла и выбрать количество байтов, которое вы хотите преобразовать с помощью параметров strncpy (n)

сильный человек

...