D. J. Bernstein

The uint16 library interface

16-bit integers

     #include <uint16.h>

     uint16 u;
uint16 is a 16-bit unsigned integer type, normally unsigned short.

Little-endian 16-bit integers

     #include <uint16.h>

     uint16_pack(s,u);
     uint16_unpack(s,&u);

     uint16 u;
     char s[2];
uint16_pack finds integers u0 and u1 between 0 and 255 inclusive such that u equals u0+256*u1. It then stores u0 in s[0] and u1 in s[1].

uint16_unpack extracts u0 from s[0] and u1 from s[1]. It then sets u to u0+256*u1.

Big-endian 16-bit integers

     #include <uint16.h>

     uint16_pack_big(s,u);
     uint16_unpack_big(s,&u);

     uint16 u;
     char s[2];
uint16_pack_big finds integers u0 and u1 between 0 and 255 inclusive such that u equals u0+256*u1. It then stores u0 in s[1] and u1 in s[0].

uint16_unpack_big extracts u0 from s[1] and u1 from s[0]. It then sets u to u0+256*u1.