Top | ![]() |
![]() |
![]() |
![]() |
#define | g_htonl() |
#define | g_htons() |
#define | g_ntohl() |
#define | g_ntohs() |
#define | GINT_FROM_BE() |
#define | GINT_FROM_LE() |
#define | GUINT_FROM_BE() |
#define | GUINT_FROM_LE() |
#define | GLONG_FROM_BE() |
#define | GLONG_FROM_LE() |
#define | GULONG_FROM_BE() |
#define | GULONG_FROM_LE() |
#define | GSIZE_FROM_BE() |
#define | GSIZE_FROM_LE() |
#define | GSSIZE_FROM_BE() |
#define | GSSIZE_FROM_LE() |
#define | GINT16_FROM_BE() |
#define | GINT16_FROM_LE() |
#define | GUINT16_FROM_BE() |
#define | GUINT16_FROM_LE() |
#define | GINT32_FROM_BE() |
#define | GINT32_FROM_LE() |
#define | GUINT32_FROM_BE() |
#define | GUINT32_FROM_LE() |
#define | GINT64_FROM_BE() |
#define | GINT64_FROM_LE() |
#define | GUINT64_FROM_BE() |
#define | GUINT64_FROM_LE() |
#define | GUINT16_SWAP_BE_PDP() |
#define | GUINT16_SWAP_LE_BE() |
#define | GUINT16_SWAP_LE_PDP() |
#define | GUINT32_SWAP_BE_PDP() |
#define | GUINT32_SWAP_LE_BE() |
#define | GUINT32_SWAP_LE_PDP() |
#define | GUINT64_SWAP_LE_BE() |
These macros provide a portable way to determine the host byte order and to convert values between different byte orders.
The byte order is the order in which bytes are stored to create larger data types such as the gint and glong values. The host byte order is the byte order used on the current machine.
Some processors store the most significant bytes (i.e. the bytes that hold the largest part of the value) first. These are known as big-endian processors. Other processors (notably the x86 family) store the most significant byte last. These are known as little-endian processors.
Finally, to complicate matters, some other processors store the bytes in a rather curious order known as PDP-endian. For a 4-byte word, the 3rd most significant byte is stored first, then the 4th, then the 1st and finally the 2nd.
Obviously there is a problem when these different processors communicate with each other, for example over networks or by using binary file formats. This is where these macros come in. They are typically used to convert values into a byte order which has been agreed on for use when communicating between different processors. The Internet uses what is known as 'network byte order' as the standard byte order (which is in fact the big-endian byte order).
Note that the byte order conversion macros may evaluate their arguments multiple times, thus you should not use them with arguments which have side-effects.
#define GINT_FROM_BE(val) (GINT_TO_BE (val))
Converts a gint value from big-endian to host byte order.
#define GINT_FROM_LE(val) (GINT_TO_LE (val))
Converts a gint value from little-endian to host byte order.
#define GUINT_FROM_BE(val) (GUINT_TO_BE (val))
Converts a guint value from big-endian to host byte order.
#define GUINT_FROM_LE(val) (GUINT_TO_LE (val))
Converts a guint value from little-endian to host byte order.
#define GLONG_FROM_BE(val) (GLONG_TO_BE (val))
Converts a glong value from big-endian to the host byte order.
#define GLONG_FROM_LE(val) (GLONG_TO_LE (val))
Converts a glong value from little-endian to host byte order.
#define GULONG_FROM_BE(val) (GULONG_TO_BE (val))
Converts a gulong value from big-endian to host byte order.
#define GULONG_FROM_LE(val) (GULONG_TO_LE (val))
Converts a gulong value from little-endian to host byte order.
#define GSIZE_FROM_BE(val) (GSIZE_TO_BE (val))
Converts a gsize value from big-endian to the host byte order.
#define GSIZE_FROM_LE(val) (GSIZE_TO_LE (val))
Converts a gsize value from little-endian to host byte order.
#define GSSIZE_FROM_BE(val) (GSSIZE_TO_BE (val))
Converts a gssize value from big-endian to host byte order.
#define GSSIZE_FROM_LE(val) (GSSIZE_TO_LE (val))
Converts a gssize value from little-endian to host byte order.
#define GINT16_FROM_BE(val) (GINT16_TO_BE (val))
Converts a gint16 value from big-endian to host byte order.
#define GINT16_FROM_LE(val) (GINT16_TO_LE (val))
Converts a gint16 value from little-endian to host byte order.
#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val))
Converts a guint16 value from big-endian to host byte order.
#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val))
Converts a guint16 value from little-endian to host byte order.
#define GINT32_FROM_BE(val) (GINT32_TO_BE (val))
Converts a gint32 value from big-endian to host byte order.
#define GINT32_FROM_LE(val) (GINT32_TO_LE (val))
Converts a gint32 value from little-endian to host byte order.
#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val))
Converts a guint32 value from big-endian to host byte order.
#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val))
Converts a guint32 value from little-endian to host byte order.
#define GINT64_FROM_BE(val) (GINT64_TO_BE (val))
Converts a gint64 value from big-endian to host byte order.
#define GINT64_FROM_LE(val) (GINT64_TO_LE (val))
Converts a gint64 value from little-endian to host byte order.
#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val))
Converts a guint64 value from big-endian to host byte order.
#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val))
Converts a guint64 value from little-endian to host byte order.
#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val))
Converts a guint16 value between big-endian and pdp-endian byte order. The conversion is symmetric so it can be used both ways.
# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val))
Converts a guint16 value between little-endian and big-endian byte order. The conversion is symmetric so it can be used both ways.
#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val))
Converts a guint16 value between little-endian and pdp-endian byte order. The conversion is symmetric so it can be used both ways.
#define GUINT32_SWAP_BE_PDP(val)
Converts a guint32 value between big-endian and pdp-endian byte order. The conversion is symmetric so it can be used both ways.
# define GUINT32_SWAP_LE_BE(val) ((guint32) __builtin_bswap32 ((gint32) val))
Converts a guint32 value between little-endian and big-endian byte order. The conversion is symmetric so it can be used both ways.
#define GUINT32_SWAP_LE_PDP(val)
Converts a guint32 value between little-endian and pdp-endian byte order. The conversion is symmetric so it can be used both ways.