The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

Макроопределения последовательности байт

Byte Order Macros — портируемый способ преобразования между разными последовательностями байт.

Краткое описание


#include <glib.h>


#define     G_BYTE_ORDER
#define     G_LITTLE_ENDIAN
#define     G_BIG_ENDIAN
#define     G_PDP_ENDIAN

#define     g_htonl                         (val)
#define     g_htons                         (val)
#define     g_ntohl                         (val)
#define     g_ntohs                         (val)

#define     GINT_FROM_BE                    (val)
#define     GINT_FROM_LE                    (val)
#define     GINT_TO_BE                      (val)
#define     GINT_TO_LE                      (val)

#define     GUINT_FROM_BE                   (val)
#define     GUINT_FROM_LE                   (val)
#define     GUINT_TO_BE                     (val)
#define     GUINT_TO_LE                     (val)

#define     GLONG_FROM_BE                   (val)
#define     GLONG_FROM_LE                   (val)
#define     GLONG_TO_BE                     (val)
#define     GLONG_TO_LE                     (val)

#define     GULONG_FROM_BE                  (val)
#define     GULONG_FROM_LE                  (val)
#define     GULONG_TO_BE                    (val)
#define     GULONG_TO_LE                    (val)

#define     GINT16_FROM_BE                  (val)
#define     GINT16_FROM_LE                  (val)
#define     GINT16_TO_BE                    (val)
#define     GINT16_TO_LE                    (val)

#define     GUINT16_FROM_BE                 (val)
#define     GUINT16_FROM_LE                 (val)
#define     GUINT16_TO_BE                   (val)
#define     GUINT16_TO_LE                   (val)

#define     GINT32_FROM_BE                  (val)
#define     GINT32_FROM_LE                  (val)
#define     GINT32_TO_BE                    (val)
#define     GINT32_TO_LE                    (val)

#define     GUINT32_FROM_BE                 (val)
#define     GUINT32_FROM_LE                 (val)
#define     GUINT32_TO_BE                   (val)
#define     GUINT32_TO_LE                   (val)

#define     GINT64_FROM_BE                  (val)
#define     GINT64_FROM_LE                  (val)
#define     GINT64_TO_BE                    (val)
#define     GINT64_TO_LE                    (val)

#define     GUINT64_FROM_BE                 (val)
#define     GUINT64_FROM_LE                 (val)
#define     GUINT64_TO_BE                   (val)
#define     GUINT64_TO_LE                   (val)

#define     GUINT16_SWAP_BE_PDP             (val)
#define     GUINT16_SWAP_LE_BE              (val)
#define     GUINT16_SWAP_LE_PDP             (val)

#define     GUINT32_SWAP_BE_PDP             (val)
#define     GUINT32_SWAP_LE_BE              (val)
#define     GUINT32_SWAP_LE_PDP             (val)

#define     GUINT64_SWAP_LE_BE              (val)

Описание

Эти макросы обеспечивают переносимый способ определения машинной последовательности байт и преобразование значений между различными последовательностями байт.

Последовательность байт это порядок в котором байты сохраняются для создания больших типов данных таких как значения gint и glong. Машинная последовательность байт это порядок байт используемый на текущей машине.

Некоторые процессоры сохраняют самые важные байты (то есть байты которые содержат большую часть значения) первыми. Они известны как big-endian процессоры.

Другие процессоры (особенно семейство x86) сохраняют самые важные байты последними. Они известны как little-endian процессоры.

В завершение, для полного усложнения, некоторые процессоры сохраняют байты в довольно любопытном порядке известном как PDP-endian. Для 4-байтного слова, 3-ий самый важный байт сохраняется первым, затем 4-ый, затем 1-ый и в конце 2-ой.

Очевидно есть проблемы когда эти разные процессоры взаимодействуют между собой, например через сеть или при использовании бинарных форматов файлов. Вот тут необходимы данные макроопределения. Они обычно используются для конвертации значений в последовательность байт которая подходит для использования при взаимодействии разных процессоров. Интернет использует известный как 'network byte order' (сетевая последовательность байт) стандарт последовательности байт (который фактически является big-endian последовательностью байт).

Помните что макросы преобразования последовательности байт могут вычислять аргументы несколько раз, поэтому вы не должны использовать их с аргументами имеющими побочные эффекты.

Детали

G_BYTE_ORDER

#define G_BYTE_ORDER G_LITTLE_ENDIAN

Машинная последовательность байт. Это может быть или G_LITTLE_ENDIAN или G_BIG_ENDIAN (поддержка для G_PDP_ENDIAN может быть добавлена в будущем.)


G_LITTLE_ENDIAN

#define G_LITTLE_ENDIAN 1234

Определяет одну из возможных последовательностей байт. Смотрите G_BYTE_ORDER.


G_BIG_ENDIAN

#define G_BIG_ENDIAN    4321

Определяет один из возможных типов последовательности байт. Смотрите G_BYTE_ORDER.


G_PDP_ENDIAN

#define G_PDP_ENDIAN    3412		/* неиспользуется, нуждается в определённой проверке PDP */	

Определяет один из возможных типов последовательности байт (в настоящее время не используется). Смотрите G_BYTE_ORDER.


g_htonl()

#define     g_htonl(val)

Конвертирует 32-битное целочисленное значение из машинной в сетевую последовательность байт.

val : 32-битное целочисленное значение в машинной последовательности байт.
Возвращает : val конвертированное в сетевую последовательность байт.

g_htons()

#define     g_htons(val)

Конвертирует 16-битное целочисленное значение из машинной в сетевую последовательность байт.

val : 16-битное целочисленное значение в машинной последовательности байт.
Возвращает : val конвертированное в сетевую последовательность байт.

g_ntohl()

#define     g_ntohl(val)

Конвертирует 32-битное целочисленное значение из сетевой в машинную последовательность байт.

val : 32-битное целочисленное значение в сетевой последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

g_ntohs()

#define     g_ntohs(val)

Конвертирует 16-битное целочисленное значение из сетевой в машинную последовательность байт.

val : 16-битное целочисленное значение в сетевой последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT_FROM_BE()

#define GINT_FROM_BE(val)	(GINT_TO_BE (val))

Конвертирует gint значение из big-endian в машинную последовательность байт.

val : gint значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT_FROM_LE()

#define GINT_FROM_LE(val)	(GINT_TO_LE (val))

Конвертирует gint значение из little-endian в машинную последовательность байт.

val : gint значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT_TO_BE()

#define GINT_TO_BE(val)		((gint) GINT32_TO_BE (val))

Конвертирует gint значение из машинной последовательности байт в big-endian.

val : gint значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian последовательностью байт.

GINT_TO_LE()

#define GINT_TO_LE(val)		((gint) GINT32_TO_LE (val))

Конвертирует gint значение из машинной последовательности байт в little-endian.

val : gint значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian последовательность байт.

GUINT_FROM_BE()

#define GUINT_FROM_BE(val)	(GUINT_TO_BE (val))

Конвертирует guint значение из big-endian в машинную последовательность байт.

val : guint значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT_FROM_LE()

#define GUINT_FROM_LE(val)	(GUINT_TO_LE (val))

Конвертирует guint значение из little-endian в машинную последовательность байт.

val : guint значение в little-endian последовательностью байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT_TO_BE()

#define GUINT_TO_BE(val)	((guint) GUINT32_TO_BE (val))

Конвертирует guint значение из машинной последовательности байт в big-endian.

val : guint значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian последовательность байт.

GUINT_TO_LE()

#define GUINT_TO_LE(val)	((guint) GUINT32_TO_LE (val))

Конвертирует guint значение из машинной последовательности байт в little-endian.

val : guint значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian последовательность байт.

GLONG_FROM_BE()

#define GLONG_FROM_BE(val)	(GLONG_TO_BE (val))

Конвертирует glong значение из big-endian to the host последовательность байт.

val : glong значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GLONG_FROM_LE()

#define GLONG_FROM_LE(val)	(GLONG_TO_LE (val))

Конвертирует glong значение из little-endian в машинную последовательность байт.

val : glong значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GLONG_TO_BE()

#define GLONG_TO_BE(val)	((glong) GINT32_TO_BE (val))

Конвертирует glong значение из машинной последовательности байт в big-endian.

val : glong значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian последовательность байт.

GLONG_TO_LE()

#define GLONG_TO_LE(val)	((glong) GINT32_TO_LE (val))

Конвертирует glong значение из машинной последовательности байт в little-endian.

val : glong значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GULONG_FROM_BE()

#define GULONG_FROM_BE(val)	(GULONG_TO_BE (val))

Конвертирует gulong значение из big-endian в машинную последовательность байт.

val : gulong значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GULONG_FROM_LE()

#define GULONG_FROM_LE(val)	(GULONG_TO_LE (val))

Конвертирует gulong значение из little-endian в машинную последовательность байт.

val : gulong значение в little-endian последовательность байт.
Возвращает : val конвертированное в машинную последовательность байт.

GULONG_TO_BE()

#define GULONG_TO_BE(val)	((gulong) GUINT32_TO_BE (val))

Конвертирует gulong значение из машинной последовательности байт в big-endian.

val : gulong значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GULONG_TO_LE()

#define GULONG_TO_LE(val)	((gulong) GUINT32_TO_LE (val))

Конвертирует gulong значение из машинной последовательности байт в little-endian.

val : gulong значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GINT16_FROM_BE()

#define GINT16_FROM_BE(val)	(GINT16_TO_BE (val))

Конвертирует gint16 значение из big-endian в машинную последовательность байт.

val : gint16 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT16_FROM_LE()

#define GINT16_FROM_LE(val)	(GINT16_TO_LE (val))

Конвертирует gint16 значение из little-endian в машинную последовательность байт.

val : gint16 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT16_TO_BE()

#define GINT16_TO_BE(val)	((gint16) GUINT16_SWAP_LE_BE (val))

Конвертирует gint16 значение из машинной последовательности байт в big-endian.

val : gint16 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GINT16_TO_LE()

#define GINT16_TO_LE(val)	((gint16) (val))

Конвертирует gint16 значение из машинной последовательности байт в little-endian.

val : gint16 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GUINT16_FROM_BE()

#define GUINT16_FROM_BE(val)	(GUINT16_TO_BE (val))

Конвертирует guint16 значение из big-endian в машинную последовательность байт.

val : guint16 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT16_FROM_LE()

#define GUINT16_FROM_LE(val)	(GUINT16_TO_LE (val))

Конвертирует guint16 значение из little-endian в машинную последовательность байт.

val : guint16 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT16_TO_BE()

#define GUINT16_TO_BE(val)	(GUINT16_SWAP_LE_BE (val))

Конвертирует guint16 значение из машинной последовательности байт в big-endian.

val : guint16 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GUINT16_TO_LE()

#define GUINT16_TO_LE(val)	((guint16) (val))

Конвертирует guint16 значение из машинной последовательности байт в little-endian.

val : guint16 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GINT32_FROM_BE()

#define GINT32_FROM_BE(val)	(GINT32_TO_BE (val))

Конвертирует gint32 значение из big-endian в машинную последовательность байт.

val : gint32 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT32_FROM_LE()

#define GINT32_FROM_LE(val)	(GINT32_TO_LE (val))

Конвертирует gint32 значение из little-endian в машинную последовательность байт.

val : gint32 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT32_TO_BE()

#define GINT32_TO_BE(val)	((gint32) GUINT32_SWAP_LE_BE (val))

Конвертирует gint32 значение из машинной последовательности байт в big-endian.

val : gint32 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GINT32_TO_LE()

#define GINT32_TO_LE(val)	((gint32) (val))

Конвертирует gint32 значение из машинной последовательности байт в little-endian.

val : gint32 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GUINT32_FROM_BE()

#define GUINT32_FROM_BE(val)	(GUINT32_TO_BE (val))

Конвертирует guint32 значение из big-endian в машинную последовательность байт.

val : guint32 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT32_FROM_LE()

#define GUINT32_FROM_LE(val)	(GUINT32_TO_LE (val))

Конвертирует guint32 значение из little-endian в машинную последовательность байт.

val : guint32 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT32_TO_BE()

#define GUINT32_TO_BE(val)	(GUINT32_SWAP_LE_BE (val))

Конвертирует guint32 значение из машинной последовательности байт в big-endian.

val : guint32 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GUINT32_TO_LE()

#define GUINT32_TO_LE(val)	((guint32) (val))

Конвертирует guint32 значение из машинной последовательности байт в little-endian.

val : guint32 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GINT64_FROM_BE()

#define GINT64_FROM_BE(val)	(GINT64_TO_BE (val))

Конвертирует gint64 значение из big-endian в машинную последовательность байт.

val : gint64 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT64_FROM_LE()

#define GINT64_FROM_LE(val)	(GINT64_TO_LE (val))

Конвертирует gint64 значение из little-endian в машинную последовательность байт.

val : gint64 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GINT64_TO_BE()

#define GINT64_TO_BE(val)	((gint64) GUINT64_SWAP_LE_BE (val))

Конвертирует gint64 значение из машинной последовательности байт в big-endian.

val : gint64 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GINT64_TO_LE()

#define GINT64_TO_LE(val)	((gint64) (val))

Конвертирует gint64 значение из машинной последовательности байт в little-endian.

val : gint64 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GUINT64_FROM_BE()

#define GUINT64_FROM_BE(val)	(GUINT64_TO_BE (val))

Конвертирует guint64 значение из big-endian в машинную последовательность байт.

val : guint64 значение в big-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT64_FROM_LE()

#define GUINT64_FROM_LE(val)	(GUINT64_TO_LE (val))

Конвертирует guint64 значение из little-endian в машинную последовательность байт.

val : guint64 значение в little-endian последовательности байт.
Возвращает : val конвертированное в машинную последовательность байт.

GUINT64_TO_BE()

#define GUINT64_TO_BE(val)	(GUINT64_SWAP_LE_BE (val))

Конвертирует guint64 значение из машинной последовательности байт в big-endian.

val : guint64 значение в машинной последовательности байт.
Возвращает : val конвертированное в big-endian.

GUINT64_TO_LE()

#define GUINT64_TO_LE(val)	((guint64) (val))

Конвертирует guint64 значение из машинной последовательности байт в little-endian.

val : guint64 значение в машинной последовательности байт.
Возвращает : val конвертированное в little-endian.

GUINT16_SWAP_BE_PDP()

#define GUINT16_SWAP_BE_PDP(val)	(GUINT16_SWAP_LE_BE (val))

Конвертирует guint16 значение между big-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint16 значение в big-endian или pdp-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT16_SWAP_LE_BE()

#define     GUINT16_SWAP_LE_BE(val)

Конвертирует guint16 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint16 значение в little-endian или big-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT16_SWAP_LE_PDP()

#define GUINT16_SWAP_LE_PDP(val)	((guint16) (val))

Конвертирует guint16 значение между little-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint16 значение в little-endian или pdp-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT32_SWAP_BE_PDP()

#define     GUINT32_SWAP_BE_PDP(val)

Конвертирует guint32 значение между big-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint32 значение в big-endian или pdp-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT32_SWAP_LE_BE()

#define     GUINT32_SWAP_LE_BE(val)

Конвертирует guint32 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint32 значение в little-endian или big-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT32_SWAP_LE_PDP()

#define     GUINT32_SWAP_LE_PDP(val)

Конвертирует guint32 значение между little-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint32 значение в little-endian или pdp-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.

GUINT64_SWAP_LE_BE()

#define     GUINT64_SWAP_LE_BE(val)

Конвертирует guint64 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.

val : guint64 значение в little-endian или big-endian последовательности байт.
Возвращает : val конвертированное в противоположную последовательность байт.



Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру