Порядок байтов и программирование сокетов в C

Я делаю программу, которая взаимодействует с определенным монитором пациента, используя сокеты 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 с правильным порядком байтов. Структура, которую я получаю, может быть непредсказуемой длины и несложной. Мне нужен быстрый и легкий подход, чтобы сделать un-marshalling.

Я не контролирую отправителя. Отправитель находится в сетевом порядке байтов. Мой вопрос только в том, что: - Безопасно ли приводить буфер к структуре, а затем использовать ntohs и ntohl для этой приведенной структуры, чтобы создать реплику этой структуры в порядке байтов хоста? Это самый быстрый подход? Если нет, то какой самый быстрый способ?

7
задан Shivam 25 March 2012 в 07:46
поделиться