Ярлыки

четверг, 9 апреля 2009 г.

Конвертация из big-endian в little-endian и наоборот.

Конвертация из big-endian в little-endian и наоборот.

Для преобразования между сетевым порядком байтов (англ. network byte order), который всегда big-endian, и порядком байтов, использующимся на машине (англ. host byte order), стандарт POSIX предусматривает функции htonl(), htons(), ntohl(), ntohs():

  • uint32_t htonl(uint32_t hostlong); — конвертирует из текущего порядка байтов в сетевой 32-битную беззнаковую величину;
  • uint16_t htons(uint16_t hostshort); — конвертирует из текущего порядка байтов в сетевой 16-битную беззнаковую величину;
  • uint32_t ntohl(uint32_t netlong); — конвертирует из сетевого порядка байтов в текущий 32-битную беззнаковую величину;
  • uint16_t ntohs(uint16_t netshort); — конвертирует из сетевого порядка байтов в текущий 16-битную беззнаковую величину.

n-сетевой порядок байтов

h-порядок байтов хоста

s-short int

l-long int

В случае совпадения текущего порядка байтов и сетевого, функции могут быть «пустыми» (то есть, не менять порядка байтов). Стандарт также допускает, чтобы эти функции были реализованы макросами.

вторник, 7 апреля 2009 г.