DevKits

String to Hex Converter — Text to Hexadecimal Bytes Online

Convert any text (UTF-8) to its hexadecimal byte representation. Configurable separator (space / comma / none), lowercase / uppercase, and optional "0x" prefix per byte. Handles emoji, CJK, and every Unicode character correctly. 100% local.

Last updated:

Comments

Enter text to get its UTF-8 hexadecimal byte representation. Each byte becomes 2 hex chars — 'A' → '41', '中' → 'e4 b8 ad', '😀' → 'f0 9f 98 80'. Pick separator (space / comma / hyphen / none / newline), case, and optional '0x' prefix.

Byte separator:
19 chars · 1 lines
25 bytes

Need to go the other way? Hex to String →

What is String to Hex?

Text-to-hex is the two-step transformation: text → UTF-8 bytes → 2 hex chars per byte. Getting UTF-8 right matters — legacy 'ASCII to hex' tools produce nonsense for any character outside 0–127 (accents, CJK, emoji). This tool uses the browser's built-in TextEncoder for a fully Unicode-conformant UTF-8 encoding, then formats each byte as a 2-digit hex number. The output is byte-for-byte identical to what you'd get from Python's `text.encode('utf-8').hex()`, Node's `Buffer.from(text, 'utf8').toString('hex')`, and Go's `hex.EncodeToString([]byte(text))`.

How to convert text to hex online

  1. 1Paste text into the input pane.
  2. 2Pick a byte separator (single space is the most common; 'none' produces a continuous hex string).
  3. 3Choose lowercase (default, matches Python / Node convention) or uppercase.
  4. 4Optionally add '0x' prefix per byte — handy when copying into C-style array literals.

Use Cases

Inspect what a database is really storing

See exactly which bytes VARCHAR is going to store — critical when a column mixes emoji, CJK, and Latin-1 legacy data.

Build test fixtures for byte-level protocols

Generate exact hex payloads for network / device tests — copy directly into a Wireshark, netcat, or Postman raw body.

Debug encoding mismatches

When a string looks wrong on the wire, comparing the actual hex against the expected reveals whether it was double-encoded, wrong-encoded (Latin-1 vs UTF-8), or truncated.

Prepare data for hash / signature demos

Every crypto library operates on bytes. Getting a canonical hex representation lets you paste into openssl, sha256sum, or a REPL.

Key Concepts

UTF-8
The dominant Unicode encoding on the web. Variable-length: 1 byte for ASCII, 2 for most Latin extended, 3 for CJK, 4 for emoji and rare scripts.
Hex byte
2 hexadecimal digits (00–FF) representing 8 bits of raw data — the standard human-readable format for binary content.

Tips & Best Practices

  • ▸The 'none' separator with lowercase is the format Python's `.hex()` uses — great for comparing outputs across languages.
  • ▸For debugging, put emoji at the start of your input — you'll immediately see 4-byte UTF-8 sequences and can visually confirm the tool works.
  • ▸If you need Latin-1 (single-byte) encoding for legacy protocol interop, this tool can't do it; use a Python REPL. UTF-8 has been the correct default since 1993.
  • ▸The reverse tool (Hex to String) accepts every separator format — round-tripping is free.

Frequently Asked Questions

How is text turned into hex?

The text is first encoded as UTF-8 (the modern default), then each byte becomes a 2-digit hex number. So 'A' (U+0041) → '41', 'é' (U+00E9) → 'c3 a9' (2 bytes), '😀' (U+1F600) → 'f0 9f 98 80' (4 bytes).

Is this the same as ASCII to hex?

For characters in the ASCII range (0–127), UTF-8 and ASCII produce identical hex. For anything beyond that — accents, CJK, emoji — UTF-8 uses 2–4 bytes per character. Pure ASCII-to-hex tools break on such input; this one doesn't.

Can I get output without any separator?

Yes — pick 'none' as the separator to get a continuous hex string like '48656c6c6f'. Or pick space, comma, hyphen, or newline.

Does uppercase / lowercase matter?

For decoding, no — the reverse tool accepts both. For readability and machine parsing, lowercase is the most common convention (matches Python's .hex() and Node's Buffer.toString('hex')).

Try Next

Regex Tester

Test regular expressions online with live match highlighting, capture-group and named-group output, and every JavaScript flag (g, i, m, s, u, y). Free, no signup, no ads — runs entirely in your browser.

Related Tools

Reference & Guides