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*.