Encoding & Transport
Choosing Base16, Base32, or Base64 for Binary-to-Text Encoding
Compare Base16, Base32 and Base64 by output size, readability and compatibility, then choose the encoding your receiving system expects.

When you are under pressure, the right question is not “which encoding do I like?” It is “what channel or reader is going to consume this value next?” Base16, Base32, and Base64 each win in different conditions.
That is the sort of decision guide that can quietly save real time on a utility site.
In brief
What it is: Base16, Base32, and Base64 are binary-to-text encodings with different alphabets, lengths, and ergonomics.
Why it matters: Choosing the right one reduces transport bugs, transcription errors, and unnecessary expansion.
Worth knowing: Match the encoding alphabet, padding rules, and case expectations to the receiving system.
Base16 is verbose but extremely inspectable
Hex is long, but it is simple to eyeball and compare at the byte level. That makes it good for debugging, hashes, and low-level protocol inspection. When you need readability by engineers more than compactness, Base16 remains surprisingly useful.
Base32 trades compactness for calmer human handling
Base32 is a middle ground. It is less dense than Base64 but more human-friendly in workflows like authenticator setup or QR-oriented secrets. When values will be handled by people, that trade is often worth it.
Base64 is the transport workhorse
Base64 is the usual machine-transport default because it is more compact and broadly supported. Use the URL-safe variant when the output must live in URLs, token segments, or similar contexts. The moment you frame the choice around the next consumer, the encoding tends to pick itself.
- Choose Base16 for byte-level inspection and debugging.
- Choose Base32 for human-entered or secret-setup workflows.
- Choose Base64 or Base64URL for dense machine transport.
If the value arrived without a reliable format label, use the String Format Identifier before decoding it. Several alphabets overlap, so character shape alone is not always enough to distinguish hex, Base64, Base64URL, or arbitrary text.
See it in a small example
Notice: The right encoding usually falls out of the next hop in the workflow.
Debug bytes -> Base16
Human secret setup -> Base32
Compact transport -> Base64 / Base64URL
What to verify
- Start with the consumer of the value, not the encoding you already know best.
- Prefer inspectability when debugging, and density when transporting.
- Switch to Base64URL when URL safety is part of the contract.
Common questions
Is hex outdated now that Base64 is common?
Hex remains excellent for byte-level inspection and debugging.
Can I switch encodings without changing the underlying meaning?
Yes, if you decode and re-encode correctly. The problem is that the receiver may expect one exact encoding form.