Я создаю программу, которая связывается с определенным монитором пациента с помощью разъемов C.Я использую сокеты без соединения (UDP) для связи с устройством.Но существует несоответствие порядка байтов между моим компьютером и устройством, и до сих пор я делал это, чтобы получить ответ синтаксического анализа от монитора пациента:
recvfrom(int socket, char *buffer, size_t length, int flags,
struct sockaddr *address, socklen_t *address_len);
Затем я приводил буфер непосредственно к структуре и использовал ntohsи ntohl, чтобы изменить порядок байтов, например:
struct A * a = (struct A *)buffer;
Struct A b;
b.v1 = ntohs(a->v1);
b.v2 = ntohl(a->v2);
Прочитав несколько примеров через Интернет, я обнаружил, что это может быть неправильным подходом из-за компиляции, зависящей от заполнения.Но я не уверен в этом.Мне нужен простой способ демонтажа буфера в структуру C с правильными порядковыми номерами.Структура, которую я получаю, может быть непредсказуемой длины и небольшой сложности.Мне нужен быстрый и легкий подход для распаковки.
Я не контролирую отправителя.Отправитель находится в сетевом порядке байтов.Мой вопрос только в том, что: - Безопасно ли приводить буфер к структуре, а затем использовать ntohs и ntohl в этой приведенной структуре, чтобы создать реплику порядка хост-байтов этой структуры?Это самый быстрый подход?Если нет, то какой может быть самый быстрый подход?