TEXT → HEX
HEX → TEXT
ASCII TABLE
BIT WIDTHS
INPUT — TYPE ANYTHING
HEXADECIMAL OUTPUT
BINARY OUTPUT
BYTE MAP — LEARN EVERY CHARACTER
INPUT — PASTE HEXADECIMAL
DECODED TEXT
BYTE MAP
ASCII TABLE — 128 CHARACTERS — PUBLIC DOMAIN SINCE 1963
CLICK ANY CELL TO INSERT INTO ENCODER
MULTI-BYTE HIGHLIGHTS — UTF-8 BEYOND ASCII
BIT WIDTHS — WHAT A HEX STRING CAN HOLD
Every hex digit packs 4 bits. Every byte is 2 hex digits = 8 bits. Stack the bytes and the world they describe grows exponentially. Read the table left-to-right: how the symbol looks, how many bits it stores, what it is conventionally called, the largest value it holds, and how many distinct values fit inside it.
| HEX | BITS | TYPE NAME | MAX VALUE (2ⁿ − 1) | COUNT (2ⁿ) |
|---|---|---|---|---|
| FF | 8 | uint8 / byte | 255 | 256 |
| FFFF | 16 | uint16 / word | 65,535 | 65,536 |
| FFFFFFFF | 32 | uint32 / dword | 4,294,967,295 | 4,294,967,296 |
| FFFFFFFFFFFFFFFF | 64 | uint64 / qword | 18,446,744,073,709,551,615 | 18,446,744,073,709,551,616 |
COUNT vs MAX — THE OFF-BY-ONE
A width holds count distinct values; the largest of them is max.
Address zero is the first address — it counts. So a uint8 holds 256 values numbered 0 through 255.
count = max + 1 always.
count = max + 1 always.
THE BIT WIDTH IS NOT THE BASE
Hexadecimal is base 16 — digits 0 1 2 3 4 5 6 7 8 9 A B C D E F.
Eight hex digits do not make a base-32 number. They make a 32-bit number,
because every digit packs 4 bits (16 = 2⁴).
The 32 is the width, not the radix.
16⁸ = 2³² = 4,294,967,296
two ways of counting to the same number
16⁸ = 2³² = 4,294,967,296
two ways of counting to the same number
REAL-WORLD ANCHORS
FFFFFFFF — every IPv4 address ever assigned fits in one of these. ~4.29 billion.
FFFFFFFFFFFFFFFF — a modern flat memory address. ~16 EiB (exbibytes) if each address is a byte.
Modern x86-64 and ARM CPUs wire only 48 of the 64 lines (some recent ones, 52). The other bits sit unused — kernels enforce a canonical-address rule: the top bits of a pointer must be all 0 or all 1, because the silicon to back them does not exist yet.
We built a ceiling so high we deliberately stopped wiring it.
FFFFFFFFFFFFFFFF — a modern flat memory address. ~16 EiB (exbibytes) if each address is a byte.
Modern x86-64 and ARM CPUs wire only 48 of the 64 lines (some recent ones, 52). The other bits sit unused — kernels enforce a canonical-address rule: the top bits of a pointer must be all 0 or all 1, because the silicon to back them does not exist yet.
We built a ceiling so high we deliberately stopped wiring it.