Я создаю демо-версию, чтобы доказать, что сетевой порядок байтов совпадает с порядком байтов:
#include "stdio.h"
#include "stdint.h"
#include "winsock2.h"
#define BL32(x) ((((x) & 0x000000ffUL) << 24) | \
(((x) & 0x0000ff00UL) << 8) | \
(((x) & 0x00ff0000UL) >> 8) | \
(((x) & 0xff000000UL) >> 24))
int main(int argc, char* argv[])
{
uint32_t s = INT_MAX; // little endian
uint32_t network = htonl(s);
uint32_t bigendian = BL32(s);
if(network == bigendian) {
printf("nbo is same as big endian\n");
} else {
printf("nbo isn't same as big endian\n");
}
return 0;
}
Эта программа работает на ПК с Windows x86 (litte endian) и выдает:
nbo is same as big endian
Я не видел, чтобы это упоминалось в учебнике или учебном пособии, поэтому я хочу подтвердить, правильно это или нет.
Кстати, я думаю, что очень важно помочь понять, каков порядок байтов в сети. Почему большая часть вопроса сконцентрирована только на "big против little endian" ...