(libc.info.gz) Byte Order

Info Catalog (libc.info.gz) Services Database (libc.info.gz) Internet Namespace (libc.info.gz) Inet Example
 
 16.6.5 Byte Order Conversion
 ----------------------------
 
 Different kinds of computers use different conventions for the ordering
 of bytes within a word.  Some computers put the most significant byte
 within a word first (this is called "big-endian" order), and others put
 it last ("little-endian" order).
 
    So that machines with different byte order conventions can
 communicate, the Internet protocols specify a canonical byte order
 convention for data transmitted over the network.  This is known as
 "network byte order".
 
    When establishing an Internet socket connection, you must make sure
 that the data in the `sin_port' and `sin_addr' members of the
 `sockaddr_in' structure are represented in network byte order.  If you
 are encoding integer data in the messages sent through the socket, you
 should convert this to network byte order too.  If you don't do this,
 your program may fail when running on or talking to other kinds of
 machines.
 
    If you use `getservbyname' and `gethostbyname' or `inet_addr' to get
 the port number and host address, the values are already in network
 byte order, and you can copy them directly into the `sockaddr_in'
 structure.
 
    Otherwise, you have to convert the values explicitly.  Use `htons'
 and `ntohs' to convert values for the `sin_port' member.  Use `htonl'
 and `ntohl' to convert IPv4 addresses for the `sin_addr' member.
 (Remember, `struct in_addr' is equivalent to `uint32_t'.)  These
 functions are declared in `netinet/in.h'.  
 
  -- Function: uint16_t htons (uint16_t HOSTSHORT)
      This function converts the `uint16_t' integer HOSTSHORT from host
      byte order to network byte order.
 
  -- Function: uint16_t ntohs (uint16_t NETSHORT)
      This function converts the `uint16_t' integer NETSHORT from
      network byte order to host byte order.
 
  -- Function: uint32_t htonl (uint32_t HOSTLONG)
      This function converts the `uint32_t' integer HOSTLONG from host
      byte order to network byte order.
 
      This is used for IPv4 Internet addresses.
 
  -- Function: uint32_t ntohl (uint32_t NETLONG)
      This function converts the `uint32_t' integer NETLONG from network
      byte order to host byte order.
 
      This is used for IPv4 Internet addresses.
 
Info Catalog (libc.info.gz) Services Database (libc.info.gz) Internet Namespace (libc.info.gz) Inet Example
automatically generated by info2html