У меня есть следующие 4-байтовые выровненные данные структуры (без заполнения), которые копируются в неподписанный буфер char * перед отправкой через сокет TCP.Машина-отправитель - это система с прямым порядком байтов, а система-получатель - это система с прямым порядком байтов.
typedef struct {
unsigned short a;
unsigned short b;
} Struct;
Struct s;
s.a = 1;
s.b = 2;
...
memmcpy (buf, (unsigned char *)&s, sizeof (Struct));
write (sockfd, buf, sizeof(Struct));
В системе отправителя я представляю, что sa будет представлен в памяти как 01 00 и sb 02 00, таким образом, поток, который отправляется, является 01 00 02 00. Я предполагаю, что в этом случаеотправитель отправляет байтовый порядок с прямым порядком байтов по сети, а не сетевой порядок байтов.
Так как получатель является системой Big Endian, мой вопрос:
- Отправитель должен отправить в сетевом порядке байтов (должен вызвать htons на sa и sb)
- Или получатель должен обработать это, вызвав ntohs?