.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2009, Linux Foundation, written by Michael Kerrisk .\" .\" a few pieces remain from an earlier version .\" Copyright (C) 2008, Nanno Langstraat .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH endian 3 "7 января 2023 г." "Linux man\-pages 6.03" .SH ИМЯ htobe16, htole16, be16toh, le16toh, htobe32, htole32, be32toh, le32toh, htobe64, htole64, be64toh, le64toh \- изменяет порядок байт у целого числа .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBuint16_t htobe16(uint16_t \fP\fIhost_16bits\fP\fB);\fP \fBuint16_t htole16(uint16_t \fP\fIhost_16bits\fP\fB);\fP \fBuint16_t be16toh(uint16_t \fP\fIbig_endian_16bits\fP\fB);\fP \fBuint16_t le16toh(uint16_t \fP\fIlittle_endian_16bits\fP\fB);\fP .PP \fBuint32_t htobe32(uint32_t \fP\fIhost_32bits\fP\fB);\fP \fBuint32_t htole32(uint32_t \fP\fIhost_32bits\fP\fB);\fP \fBuint32_t be32toh(uint32_t \fP\fIbig_endian_32bits\fP\fB);\fP \fBuint32_t le32toh(uint32_t \fP\fIlittle_endian_32bits\fP\fB);\fP .PP \fBuint64_t htobe64(uint64_t \fP\fIhost_64bits\fP\fB);\fP \fBuint64_t htole64(uint64_t \fP\fIhost_64bits\fP\fB);\fP \fBuint64_t be64toh(uint64_t \fP\fIbig_endian_64bits\fP\fB);\fP \fBuint64_t le64toh(uint64_t \fP\fIlittle_endian_64bits\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .ad l .PP \fBhtobe16\fP(), \fBhtole16\fP(), \fBbe16toh\fP(), \fBle16toh\fP(), \fBhtobe32\fP(), \fBhtole32\fP(), \fBbe32toh\fP(), \fBle32toh\fP(), \fBhtobe64\fP(), \fBhtole64\fP(), \fBbe64toh\fP(), \fBle64toh\fP(): .nf начиная с glibc 2.19: _DEFAULT_SOURCE в glibc до версии 2.19 включительно: _BSD_SOURCE .fi .ad .SH ОПИСАНИЕ Эти функции преобразуют кодирование байт целых значений из/в порядок байт, используемом в работающем ЦП («порядок байт узла»), от младшего к старшему (little\-endian) и от старшего к младшему (big\-endian). .PP Число \fInn\fP в имени каждой функции показывает размер целого, с которым работает функция — может быть 16, 32 или 64 бита. .PP Функции с именами вида «htobe\fInn\fP» преобразуют число с порядком байт узла в число с порядком байт от старшего к младшему. .PP Функции с именами вида «htole\fInn\fP» преобразуют число с порядком байт узла в число с порядком байт от младшего к старшему. .PP Функции с именами вида «be\fInn\fPtoh» преобразуют число с порядком байт от старшего к младшему в число с порядком байт узла. .PP Функции с именами вида «le\fInn\fPtoh» преобразуют число с порядком байт от младшего к старшему в число с порядком байт узла. .SH ВЕРСИИ These functions were added in glibc 2.9. .SH СТАНДАРТЫ Это нестандартные функции. Подобные функции есть в BSD, где вместо \fI\fP для них требуется заголовочный файл \fI\fP. К сожалению, NetBSD, FreeBSD и glibc не следуют изначальному соглашению об именах функций в OpenBSD, где часть \fInn\fP всегда находится в конце имени функции (то есть, например, в NetBSD, FreeBSD и glibc используется «be32toh» вместо эквивалентной «betoh32» из OpenBSD). .SH ЗАМЕЧАНИЯ Данные функции похожи на функции старого семейства \fBbyteorder\fP(3). Например, \fBbe32toh\fP() идентична \fBntohl\fP(). .PP Преимущество функций \fBbyteorder\fP(3) в том, что они являются стандартными и доступны во всех системах UNIX. С другой стороны, тот факт, что они разрабатывались для использования в контексте TCP/IP означает, что среди них нет функций для 64\-битных значений и чисел с порядком байт от младшего к старшему, описанных в этой странице. .SH ПРИМЕРЫ Ниже представлена программа, которая выводит результаты преобразования целого с порядком байт узла в целое с порядком байт от младшего к старшему и от старшего к младшему. Так как порядок байт узла будет эквивалентен порядку от младшего к старшему или от старшего к младшему, то реально выполняется только одно преобразование. Если эта программа запускается на системе с порядком байт от младшего к старшему, например x86\-32, то мы увидим следующее: .PP .in +4n .EX $ \fB./a.out\fP x.u32 = 0x44332211 htole32(x.u32) = 0x44332211 htobe32(x.u32) = 0x11223344 .EE .in .SS "Исходный код программы" .\" SRC BEGIN (endian.c) \& .EX #include #include #include #include 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\en", x.u32); printf("htole32(x.u32) = %#x\en", htole32(x.u32)); printf("htobe32(x.u32) = %#x\en", htobe32(x.u32)); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBbswap\fP(3), \fBbyteorder\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .