Стандарт С99 вводит заголовочный файл stdint.h, в котором определяются архитектурно-независимые целочисленные типы данных:
int8_t, int16_t, int32_t, int64_t знаковые
uint8_t, uint16_t, uint32_t, uint64_t беззнаковые
LE - x86, x64, i8051, Atmel AVR
BE - ARM, PowerPC, SPARC, Atmel AVR32
Для работы с различным порядком байтов используется семейство функций htonX() и ntohX(). Заголовочные файлы для этих функций различны для разных ОС, поэтому лучше использовать макрос:
#ifdef _MSC_VER
#include <winsock2.h>
#else
#include <arpa/inet.h>
#endif
htonX() преобразует порядок байтов из принятого для данной архитектуры в сетевой (big-endian).
ntohX() преобразует порядок байтов из сетевого (big-endian) в принятый для данной архитектуры.
htons(), ntohs() - short
htonl(), ntohl() - long
htonll(), ntohll() - long long
Макрос для определения стандартной функции hton() (для стандарта С11).
#define hton(x) _Generic(x,
short: htons(x),
long: htonl(x),
long long: htonll(x))
Комментариев нет :
Отправить комментарий