Справочное описание GLib | ||||
---|---|---|---|---|
Макроопределения последовательности байт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 последовательностью байт).
Помните что макросы преобразования последовательности байт могут вычислять аргументы несколько раз, поэтому вы не должны использовать их с аргументами имеющими побочные эффекты.
#define G_BYTE_ORDER G_LITTLE_ENDIAN
Машинная последовательность байт. Это может быть или G_LITTLE_ENDIAN или G_BIG_ENDIAN (поддержка для G_PDP_ENDIAN может быть добавлена в будущем.)
#define G_LITTLE_ENDIAN 1234
Определяет одну из возможных последовательностей байт. Смотрите G_BYTE_ORDER.
#define G_BIG_ENDIAN 4321
Определяет один из возможных типов последовательности байт. Смотрите G_BYTE_ORDER.
#define G_PDP_ENDIAN 3412 /* неиспользуется, нуждается в определённой проверке PDP */
Определяет один из возможных типов последовательности байт (в настоящее время не используется). Смотрите G_BYTE_ORDER.
#define g_htonl(val)
Конвертирует 32-битное целочисленное значение из машинной в сетевую последовательность байт.
val : |
32-битное целочисленное значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в сетевую последовательность байт.
|
#define g_htons(val)
Конвертирует 16-битное целочисленное значение из машинной в сетевую последовательность байт.
val : |
16-битное целочисленное значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в сетевую последовательность байт.
|
#define g_ntohl(val)
Конвертирует 32-битное целочисленное значение из сетевой в машинную последовательность байт.
val : |
32-битное целочисленное значение в сетевой последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define g_ntohs(val)
Конвертирует 16-битное целочисленное значение из сетевой в машинную последовательность байт.
val : |
16-битное целочисленное значение в сетевой последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT_FROM_BE(val) (GINT_TO_BE (val))
Конвертирует gint значение из big-endian в машинную последовательность байт.
val : |
gint значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT_FROM_LE(val) (GINT_TO_LE (val))
Конвертирует gint значение из little-endian в машинную последовательность байт.
val : |
gint значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT_TO_BE(val) ((gint) GINT32_TO_BE (val))
Конвертирует gint значение из машинной последовательности байт в big-endian.
val : |
gint значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian последовательностью байт.
|
#define GINT_TO_LE(val) ((gint) GINT32_TO_LE (val))
Конвертирует gint значение из машинной последовательности байт в little-endian.
val : |
gint значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian последовательность байт.
|
#define GUINT_FROM_BE(val) (GUINT_TO_BE (val))
Конвертирует guint значение из big-endian в машинную последовательность байт.
val : |
guint значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT_FROM_LE(val) (GUINT_TO_LE (val))
Конвертирует guint значение из little-endian в машинную последовательность байт.
val : |
guint значение в little-endian последовательностью байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT_TO_BE(val) ((guint) GUINT32_TO_BE (val))
Конвертирует guint значение из машинной последовательности байт в big-endian.
val : |
guint значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian последовательность байт.
|
#define GUINT_TO_LE(val) ((guint) GUINT32_TO_LE (val))
Конвертирует guint значение из машинной последовательности байт в little-endian.
val : |
guint значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian последовательность байт.
|
#define GLONG_FROM_BE(val) (GLONG_TO_BE (val))
Конвертирует glong значение из big-endian to the host последовательность байт.
val : |
glong значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GLONG_FROM_LE(val) (GLONG_TO_LE (val))
Конвертирует glong значение из little-endian в машинную последовательность байт.
val : |
glong значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GLONG_TO_BE(val) ((glong) GINT32_TO_BE (val))
Конвертирует glong значение из машинной последовательности байт в big-endian.
val : |
glong значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian последовательность байт.
|
#define GLONG_TO_LE(val) ((glong) GINT32_TO_LE (val))
Конвертирует glong значение из машинной последовательности байт в little-endian.
val : |
glong значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GULONG_FROM_BE(val) (GULONG_TO_BE (val))
Конвертирует gulong значение из big-endian в машинную последовательность байт.
val : |
gulong значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GULONG_FROM_LE(val) (GULONG_TO_LE (val))
Конвертирует gulong значение из little-endian в машинную последовательность байт.
val : |
gulong значение в little-endian последовательность байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GULONG_TO_BE(val) ((gulong) GUINT32_TO_BE (val))
Конвертирует gulong значение из машинной последовательности байт в big-endian.
val : |
gulong значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GULONG_TO_LE(val) ((gulong) GUINT32_TO_LE (val))
Конвертирует gulong значение из машинной последовательности байт в little-endian.
val : |
gulong значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GINT16_FROM_BE(val) (GINT16_TO_BE (val))
Конвертирует gint16 значение из big-endian в машинную последовательность байт.
val : |
gint16 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT16_FROM_LE(val) (GINT16_TO_LE (val))
Конвертирует gint16 значение из little-endian в машинную последовательность байт.
val : |
gint16 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT16_TO_BE(val) ((gint16) GUINT16_SWAP_LE_BE (val))
Конвертирует gint16 значение из машинной последовательности байт в big-endian.
val : |
gint16 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GINT16_TO_LE(val) ((gint16) (val))
Конвертирует gint16 значение из машинной последовательности байт в little-endian.
val : |
gint16 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val))
Конвертирует guint16 значение из big-endian в машинную последовательность байт.
val : |
guint16 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val))
Конвертирует guint16 значение из little-endian в машинную последовательность байт.
val : |
guint16 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT16_TO_BE(val) (GUINT16_SWAP_LE_BE (val))
Конвертирует guint16 значение из машинной последовательности байт в big-endian.
val : |
guint16 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GUINT16_TO_LE(val) ((guint16) (val))
Конвертирует guint16 значение из машинной последовательности байт в little-endian.
val : |
guint16 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GINT32_FROM_BE(val) (GINT32_TO_BE (val))
Конвертирует gint32 значение из big-endian в машинную последовательность байт.
val : |
gint32 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT32_FROM_LE(val) (GINT32_TO_LE (val))
Конвертирует gint32 значение из little-endian в машинную последовательность байт.
val : |
gint32 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT32_TO_BE(val) ((gint32) GUINT32_SWAP_LE_BE (val))
Конвертирует gint32 значение из машинной последовательности байт в big-endian.
val : |
gint32 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GINT32_TO_LE(val) ((gint32) (val))
Конвертирует gint32 значение из машинной последовательности байт в little-endian.
val : |
gint32 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val))
Конвертирует guint32 значение из big-endian в машинную последовательность байт.
val : |
guint32 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val))
Конвертирует guint32 значение из little-endian в машинную последовательность байт.
val : |
guint32 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT32_TO_BE(val) (GUINT32_SWAP_LE_BE (val))
Конвертирует guint32 значение из машинной последовательности байт в big-endian.
val : |
guint32 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GUINT32_TO_LE(val) ((guint32) (val))
Конвертирует guint32 значение из машинной последовательности байт в little-endian.
val : |
guint32 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GINT64_FROM_BE(val) (GINT64_TO_BE (val))
Конвертирует gint64 значение из big-endian в машинную последовательность байт.
val : |
gint64 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT64_FROM_LE(val) (GINT64_TO_LE (val))
Конвертирует gint64 значение из little-endian в машинную последовательность байт.
val : |
gint64 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GINT64_TO_BE(val) ((gint64) GUINT64_SWAP_LE_BE (val))
Конвертирует gint64 значение из машинной последовательности байт в big-endian.
val : |
gint64 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GINT64_TO_LE(val) ((gint64) (val))
Конвертирует gint64 значение из машинной последовательности байт в little-endian.
val : |
gint64 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val))
Конвертирует guint64 значение из big-endian в машинную последовательность байт.
val : |
guint64 значение в big-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val))
Конвертирует guint64 значение из little-endian в машинную последовательность байт.
val : |
guint64 значение в little-endian последовательности байт. |
Возвращает : |
val конвертированное в машинную последовательность байт.
|
#define GUINT64_TO_BE(val) (GUINT64_SWAP_LE_BE (val))
Конвертирует guint64 значение из машинной последовательности байт в big-endian.
val : |
guint64 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в big-endian.
|
#define GUINT64_TO_LE(val) ((guint64) (val))
Конвертирует guint64 значение из машинной последовательности байт в little-endian.
val : |
guint64 значение в машинной последовательности байт. |
Возвращает : |
val конвертированное в little-endian.
|
#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val))
Конвертирует guint16 значение между big-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint16 значение в big-endian или pdp-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT16_SWAP_LE_BE(val)
Конвертирует guint16 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint16 значение в little-endian или big-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val))
Конвертирует guint16 значение между little-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint16 значение в little-endian или pdp-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT32_SWAP_BE_PDP(val)
Конвертирует guint32 значение между big-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint32 значение в big-endian или pdp-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT32_SWAP_LE_BE(val)
Конвертирует guint32 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint32 значение в little-endian или big-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT32_SWAP_LE_PDP(val)
Конвертирует guint32 значение между little-endian и pdp-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint32 значение в little-endian или pdp-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|
#define GUINT64_SWAP_LE_BE(val)
Конвертирует guint64 значение между little-endian и big-endian последовательностью байт. Преобразование является симметричным, поэтому может использоваться в обоих направлениях.
val : |
guint64 значение в little-endian или big-endian последовательности байт. |
Возвращает : |
val конвертированное в противоположную последовательность байт.
|