Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       htobe16,  htole16, be16toh, le16toh, htobe32, htole32, be32toh, le32toh, htobe64, htole64,
       be64toh, le64toh - изменяет порядок байт у целого числа

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <endian.h>

       uint16_t htobe16(uint16_t host_16bits);
       uint16_t htole16(uint16_t host_16bits);
       uint16_t be16toh(uint16_t big_endian_16bits);
       uint16_t le16toh(uint16_t little_endian_16bits);

       uint32_t htobe32(uint32_t host_32bits);
       uint32_t htole32(uint32_t host_32bits);
       uint32_t be32toh(uint32_t big_endian_32bits);
       uint32_t le32toh(uint32_t little_endian_32bits);

       uint64_t htobe64(uint64_t host_64bits);
       uint64_t htole64(uint64_t host_64bits);
       uint64_t be64toh(uint64_t big_endian_64bits);
       uint64_t le64toh(uint64_t little_endian_64bits);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       htobe16(), htole16(), be16toh(), le16toh(), htobe32(), htole32(), be32toh(), le32toh(),
       htobe64(), htole64(), be64toh(), le64toh():
           начиная с glibc 2.19:
               _DEFAULT_SOURCE
           в glibc до версии 2.19 включительно:
               _BSD_SOURCE

ОПИСАНИЕ

       Эти  функции преобразуют кодирование байт целых значений из/в порядок байт, используемом в
       работающем ЦП («порядок байт узла»), от младшего к старшему (little-endian) и от  старшего
       к младшему (big-endian).

       Число  nn  в  имени  каждой функции показывает размер целого, с которым работает функция —
       может быть 16, 32 или 64 бита.

       Функции с именами вида «htobenn» преобразуют число с порядком байт узла в число с порядком
       байт от старшего к младшему.

       Функции с именами вида «htolenn» преобразуют число с порядком байт узла в число с порядком
       байт от младшего к старшему.

       Функции с именами вида «benntoh» преобразуют число с порядком байт от старшего к  младшему
       в число с порядком байт узла.

       Функции  с именами вида «lenntoh» преобразуют число с порядком байт от младшего к старшему
       в число с порядком байт узла.

ВЕРСИИ

       These functions were added in glibc 2.9.

СТАНДАРТЫ

       Это нестандартные функции. Подобные функции есть в BSD,  где  вместо  <endian.h>  для  них
       требуется  заголовочный  файл  <sys/endian.h>.  К  сожалению,  NetBSD,  FreeBSD и glibc не
       следуют изначальному соглашению об именах функций в OpenBSD, где часть nn всегда находится
       в конце имени функции (то есть, например, в NetBSD, FreeBSD и glibc используется «be32toh»
       вместо эквивалентной «betoh32» из OpenBSD).

ЗАМЕЧАНИЯ

       Данные функции похожи на  функции  старого  семейства  byteorder(3).  Например,  be32toh()
       идентична ntohl().

       Преимущество  функций byteorder(3) в том, что они являются стандартными и доступны во всех
       системах UNIX. С другой стороны, тот факт, что они  разрабатывались  для  использования  в
       контексте  TCP/IP  означает,  что  среди  них нет функций для 64-битных значений и чисел с
       порядком байт от младшего к старшему, описанных в этой странице.

ПРИМЕРЫ

       Ниже представлена программа, которая выводит результаты преобразования целого  с  порядком
       байт узла в целое с порядком байт от младшего к старшему и от старшего к младшему. Так как
       порядок байт узла будет эквивалентен порядку от младшего к  старшему  или  от  старшего  к
       младшему,   то   реально  выполняется  только  одно  преобразование.  Если  эта  программа
       запускается на системе с порядком байт от младшего к  старшему,  например  x86-32,  то  мы
       увидим следующее:

           $ ./a.out
           x.u32 = 0x44332211
           htole32(x.u32) = 0x44332211
           htobe32(x.u32) = 0x11223344

   Исходный код программы

       #include <endian.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(void)
       {
           union {
               uint32_t u32;
               uint8_t arr[4];
           } x;

           x.arr[0] = 0x11;     /* низший адресуемый байт */
           x.arr[1] = 0x22;
           x.arr[2] = 0x33;
           x.arr[3] = 0x44;     /* высший адресуемый байт */

           printf("x.u32 = %#x\n", x.u32);
           printf("htole32(x.u32) = %#x\n", htole32(x.u32));
           printf("htobe32(x.u32) = %#x\n", htobe32(x.u32));

           exit(EXIT_SUCCESS);
       }

СМ. ТАКЖЕ

       bswap(3), byteorder(3)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,   Yuri   Kozlov   <yuray@komyakino.ru>    и    Иван    Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.