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

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 конвертированное в противоположную последовательность байт.