Here is a snippet from a font definition used by an OLED library.
// standard ASCII 5x8 font (6 pixel spacing including the one-pixel space best added on left side)
#include <avr/pgmspace.h>
const uint8_t font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, // space
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x07, 0x00, 0x07, 0x00, // "
0x14, 0x7F, 0x14, 0x7F, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x23, 0x13, 0x08, 0x64, 0x62, // %
0x36, 0x49, 0x56, 0x20, 0x50, // &
0x00, 0x08, 0x07, 0x03, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x80, 0x70, 0x30, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x00, 0x60, 0x60, 0x00, // .
Look at this line.
0x08, 0x08, 0x08, 0x08, 0x08, // -
See how that defines the graphical representation of the dash character?
Where this one
0x00, 0x00, 0x5F, 0x00, 0x00, // !
defines the representation of an exclamation.