hex dump · xxd · 16 cols · local

View any text as a hex dump

Classic xxd-style hex dump — offset, 16 bytes of hex, printable ASCII side by side. Useful for binary file inspection and reverse engineering. Runs entirely in your browser.

Hex Dump Viewer
Bytes
44 B
44 B
Rows
3
16 cols
Chars
44
ascii
Status
ready
live
input · text
output · hex dump
00000000  54 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20  |The quick brown |
00000010  66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 72 20 74  |fox jumps over t|
00000020  68 65 20 6c 61 7a 79 20 64 6f 67 2e              |he lazy dog.|
Quick Start

How to read a hex dump

Each row is 16 bytes. The leftmost column is the offset in hex; the middle column is the raw bytes as two-digit hex pairs; the right column shows printable ASCII (dots for non-printable).

  1. 01

    Paste your text

    UTF-8 encoded — emoji and accents become their multi-byte representation.

    Bytes flow through TextEncoder/TextDecoder for predictable UTF-8 semantics — emoji, surrogate pairs, and combining marks all encode losslessly.

    inputUTF-8TextEncoderlosslesslive
    input · raw bytesutf-8 · UTF-8
    hello
    loaded · UTF-8MIME · ready
  2. 02

    Read the offset

    8-digit hex on the left tells you where each row starts.

    Hash and signature operations call crypto.subtle from the Web Crypto API, so output matches OpenSSL / Node bit-for-bit.

    offsetWeb Cryptosubtledeterministiclive
    off · options00000000 · live
    00000000  …
    options applied · livelive
  3. 03

    Scan the bytes

    16 hex pairs per row. Look for magic numbers, ASCII strings, run-length zeros.

    Options re-run instantly through useEffect + useMemo — switching URL-safe mode or padding doesn’t re-encode from scratch.

    bytesmemoisedoptionsinstantreactive
    row · encoded16 B · ready
    68 65 6c 6c 6f
    encoded · livelossless
  4. 04

    Match ASCII side

    The pipe-delimited gutter shows printable bytes, dots for the rest.

    Copy uses the Async Clipboard API; downloads ship via Blob with the appropriate MIME (text/plain, image/png, …) so external tools recognise them.

    asciiclipboardblobMIME-correctclient-side
    ok · copiedready · done
    |hello|
    shipped · ready to shipsuccess
Pro tips

Encoding without surprises

Always UTF-8 first

Use TextEncoder / TextDecoder for bytes ↔ string conversion. btoa alone breaks on non-ASCII.

URL-safe vs standard Base64

Standard uses +, /, =; URL-safe swaps to -, _, no padding. Don’t mix them.

Hashes aren’t passwords

SHA-256 is fast; that’s good for fingerprints, bad for passwords. Use bcrypt / argon2 for credentials.

Watch padding rules

Some decoders are strict about = padding, others auto-pad. If round-trips fail at exactly 1 or 2 bytes, check padding.

Use Web Crypto for keys

Generate cryptographic keys via crypto.subtle, never Math.random. The latter is predictable.

JWT decode ≠ verify

Decoding a JWT just splits and base64-decodes. Verification needs the issuer’s public key / shared secret.

Use Cases

When to inspect a hex dump

Reverse engineering, magic-byte sniffing, binary debugging.

Magic-byte sniffing

Identify file format from the first 4–16 bytes. Output round-trips losslessly with the matching decoder — both run client-side, so end-to-end testing happens in a single tab. Encoding flows through TextEncoder for predictable UTF-8 semantics.

RFC-compliant

Encoding bugs

Spot BOMs, smart quotes, hidden Unicode. Web Crypto's subtle.digest produces output that matches OpenSSL, GPG, and Node's crypto module byte-for-byte. That makes the result trustworthy as a content fingerprint, ETag, or integrity check.

OpenSSL-matched

Protocol debugging

Compare raw bytes of two HTTP/MQTT payloads. Pairs cleanly with HMAC, JWT, and signed-URL workflows where bit-level correctness matters. The browser's crypto stack is FIPS 140-validated in Chrome and Firefox, so it's production-grade.

lossless

Binary diffing

Eyeball differences before a real binary diff tool. Output uses canonical RFC 4648 / 7515 alphabets so curl, openssl, and any standards-compliant decoder accept it as input. URL-safe variants drop padding for tokens that travel in query strings.

byte-identical

Reverse engineering

Hunt for ASCII strings inside firmware blobs. Heavy hashing runs through useMemo so large inputs don't block typing. PBKDF2, bcrypt, and Argon2 expose configurable cost factors — tune for your threat model, not the default.

spec-grade

Teaching

Show students how text becomes bytes. Same input plus same options always yields identical bytes. That's the foundation for content-addressed storage (IPFS, Git, S3 ETags) and means the output is safe to commit to fixtures.

production-ready
FAQ

Frequently asked questions

Non-printable bytes (control characters, high-bit bytes) are shown as dots in the ASCII column to keep the alignment clean.
UTF-8 encodes code points beyond U+FFFF as 4 bytes. Emoji often combine surrogate pairs or ZWJ sequences, so they can span many bytes.
Paste text — the encoder treats your input as UTF-8 text. For binary files, use the File Checksum tool instead.
Same layout, but read-only and live as you type. No xxd -r reverse mode (paste hex into a converter for that).
No. The hex dump is generated in your browser — it runs locally and your text never leaves the device.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!