mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-28 23:16:14 +01:00
629 lines
15 KiB
Plaintext
629 lines
15 KiB
Plaintext
<!-- ##### SECTION Title ##### -->
|
|
Byte Order Macros
|
|
|
|
<!-- ##### SECTION Short_Description ##### -->
|
|
a portable way to convert between different byte orders
|
|
|
|
<!-- ##### SECTION Long_Description ##### -->
|
|
<para>
|
|
These macros provide a portable way to determine the host byte order
|
|
and to convert values between different byte orders.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
Other processors (notably the x86 family) store the most significant byte
|
|
last. These are known as little-endian processors.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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).
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<!-- ##### SECTION See_Also ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
<!-- ##### SECTION Stability_Level ##### -->
|
|
|
|
|
|
<!-- ##### SECTION Image ##### -->
|
|
|
|
|
|
<!-- ##### MACRO G_BYTE_ORDER ##### -->
|
|
<para>
|
|
The host byte order.
|
|
This can be either #G_LITTLE_ENDIAN or #G_BIG_ENDIAN (support for
|
|
#G_PDP_ENDIAN may be added in future.)
|
|
</para>
|
|
|
|
|
|
|
|
<!-- ##### MACRO G_LITTLE_ENDIAN ##### -->
|
|
<para>
|
|
Specifies one of the possible types of byte order.
|
|
See #G_BYTE_ORDER.
|
|
</para>
|
|
|
|
|
|
|
|
<!-- ##### MACRO G_BIG_ENDIAN ##### -->
|
|
<para>
|
|
Specifies one of the possible types of byte order.
|
|
See #G_BYTE_ORDER.
|
|
</para>
|
|
|
|
|
|
|
|
<!-- ##### MACRO G_PDP_ENDIAN ##### -->
|
|
<para>
|
|
Specifies one of the possible types of byte order (currently unused).
|
|
See #G_BYTE_ORDER.
|
|
</para>
|
|
|
|
|
|
|
|
<!-- ##### MACRO g_htonl ##### -->
|
|
<para>
|
|
Converts a 32-bit integer value from host to network byte order.
|
|
</para>
|
|
|
|
@val: a 32-bit integer value in host byte order.
|
|
@Returns: @val converted to network byte order.
|
|
|
|
|
|
<!-- ##### MACRO g_htons ##### -->
|
|
<para>
|
|
Converts a 16-bit integer value from host to network byte order.
|
|
</para>
|
|
|
|
@val: a 16-bit integer value in host byte order.
|
|
@Returns: @val converted to network byte order.
|
|
|
|
|
|
<!-- ##### MACRO g_ntohl ##### -->
|
|
<para>
|
|
Converts a 32-bit integer value from network to host byte order.
|
|
</para>
|
|
|
|
@val: a 32-bit integer value in network byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO g_ntohs ##### -->
|
|
<para>
|
|
Converts a 16-bit integer value from network to host byte order.
|
|
</para>
|
|
|
|
@val: a 16-bit integer value in network byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gint value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gint value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gint value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gint value in host byte order.
|
|
@Returns: @val converted to big-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gint value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gint value in host byte order.
|
|
@Returns: @val converted to little-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #guint value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #guint value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT_TO_BE ##### -->
|
|
<para>
|
|
Converts a #guint value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #guint value in host byte order.
|
|
@Returns: @val converted to big-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT_TO_LE ##### -->
|
|
<para>
|
|
Converts a #guint value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #guint value in host byte order.
|
|
@Returns: @val converted to little-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GLONG_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #glong value from big-endian to the host byte order.
|
|
</para>
|
|
|
|
@val: a #glong value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GLONG_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #glong value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #glong value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GLONG_TO_BE ##### -->
|
|
<para>
|
|
Converts a #glong value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #glong value in host byte order.
|
|
@Returns: @val converted to big-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GLONG_TO_LE ##### -->
|
|
<para>
|
|
Converts a #glong value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #glong value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GULONG_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gulong value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gulong value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GULONG_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gulong value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gulong value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GULONG_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gulong value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gulong value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GULONG_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gulong value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gulong value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GSIZE_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gsize value from big-endian to the host byte order.
|
|
</para>
|
|
|
|
@val: a #gsize value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GSIZE_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gsize value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gsize value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GSIZE_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gsize value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gsize value in host byte order.
|
|
@Returns: @val converted to big-endian byte order.
|
|
|
|
|
|
<!-- ##### MACRO GSIZE_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gsize value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gsize value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GSSIZE_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gssize value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gssize value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GSSIZE_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gssize value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gssize value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GSSIZE_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gssize value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gssize value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GSSIZE_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gssize value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gssize value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT16_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gint16 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint16 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT16_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gint16 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint16 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT16_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gint16 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gint16 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT16_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gint16 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gint16 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #guint16 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint16 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #guint16 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint16 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_TO_BE ##### -->
|
|
<para>
|
|
Converts a #guint16 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #guint16 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_TO_LE ##### -->
|
|
<para>
|
|
Converts a #guint16 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #guint16 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT32_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gint32 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint32 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT32_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gint32 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint32 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT32_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gint32 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gint32 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT32_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gint32 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gint32 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #guint32 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint32 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #guint32 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint32 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_TO_BE ##### -->
|
|
<para>
|
|
Converts a #guint32 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #guint32 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_TO_LE ##### -->
|
|
<para>
|
|
Converts a #guint32 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #guint32 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT64_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #gint64 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint64 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT64_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #gint64 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #gint64 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GINT64_TO_BE ##### -->
|
|
<para>
|
|
Converts a #gint64 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #gint64 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GINT64_TO_LE ##### -->
|
|
<para>
|
|
Converts a #gint64 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #gint64 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT64_FROM_BE ##### -->
|
|
<para>
|
|
Converts a #guint64 value from big-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint64 value in big-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT64_FROM_LE ##### -->
|
|
<para>
|
|
Converts a #guint64 value from little-endian to host byte order.
|
|
</para>
|
|
|
|
@val: a #guint64 value in little-endian byte order.
|
|
@Returns: @val converted to host byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT64_TO_BE ##### -->
|
|
<para>
|
|
Converts a #guint64 value from host byte order to big-endian.
|
|
</para>
|
|
|
|
@val: a #guint64 value in host byte order.
|
|
@Returns: @val converted to big-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT64_TO_LE ##### -->
|
|
<para>
|
|
Converts a #guint64 value from host byte order to little-endian.
|
|
</para>
|
|
|
|
@val: a #guint64 value in host byte order.
|
|
@Returns: @val converted to little-endian.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_SWAP_BE_PDP ##### -->
|
|
<para>
|
|
Converts a #guint16 value between big-endian and pdp-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint16 value in big-endian or pdp-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_SWAP_LE_BE ##### -->
|
|
<para>
|
|
Converts a #guint16 value between little-endian and big-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint16 value in little-endian or big-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT16_SWAP_LE_PDP ##### -->
|
|
<para>
|
|
Converts a #guint16 value between little-endian and pdp-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint16 value in little-endian or pdp-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_SWAP_BE_PDP ##### -->
|
|
<para>
|
|
Converts a #guint32 value between big-endian and pdp-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint32 value in big-endian or pdp-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_SWAP_LE_BE ##### -->
|
|
<para>
|
|
Converts a #guint32 value between little-endian and big-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint32 value in little-endian or big-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT32_SWAP_LE_PDP ##### -->
|
|
<para>
|
|
Converts a #guint32 value between little-endian and pdp-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint32 value in little-endian or pdp-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|
|
<!-- ##### MACRO GUINT64_SWAP_LE_BE ##### -->
|
|
<para>
|
|
Converts a #guint64 value between little-endian and big-endian byte order.
|
|
The conversion is symmetric so it can be used both ways.
|
|
</para>
|
|
|
|
@val: a #guint64 value in little-endian or big-endian byte order.
|
|
@Returns: @val converted to the opposite byte order.
|
|
|
|
|