These routines convert 16, 32 and 64-bit quantities between different
byte orderings.
The
swap
functions reverse the byte ordering of
the given quantity; the others convert either from/to the native
byte order used by the host to/from either little- or big-endian (a.k.a
network) order.
Apart from the swap functions, the names can be described by this form:
{src-order}to{dst-order}{size}.
Both {src-order} and {dst-order} can take the following forms:
h
Host order.
n
Network order (big-endian).
be
Big-endian (most significant byte first).
le
Little-endian (least significant byte first).
One of the specified orderings must be
h.
{size} will take these forms:
l
Long (32-bit, used in conjunction with forms involving
n).
s
Short (16-bit, used in conjunction with forms involving
n).
16
16-bit.
32
32-bit.
64
64-bit.
The swap functions are of the form: swap{size}.
Names involving
n
convert quantities between network
byte order and host byte order.
The last letter
.Pf ( Sq s
or
l)
is a mnemonic
for the traditional names for such quantities,
short
and
long,
respectively.
Today, the C concept of
short
and
long
integers need not coincide with this traditional misunderstanding.
On machines which have a byte order which is the same as the network
order, routines are defined as null macros.
The functions involving either
be,
le,
or
swap
use the numbers
16, 32, or 64 for specifying the bitwidth of the quantities they operate on.
Currently all supported architectures are either big- or little-endian
so either the
be
or
le
variants are implemented as null macros.
The routines mentioned above which have either {src-order} or {dst-order}
set to
n
are most often used in
conjunction with Internet addresses and ports as returned by
gethostbyname(3)
and
getservent(3).
The
htonl();,
htons();,
ntohl();,
and
ntohs();
functions conform to
The other functions are extensions that should not be used when portability
is required.
HISTORY
The
byteorder
functions appeared in
4.2BSD.
BUGS
On the vax, alpha, i386, and some mips architectures,
bytes are handled backwards from most everyone else in the world.
This is not expected to be fixed in the near future.