A login fails. The password looks right. Paste the string here and a stray 32 at the end gives the answer: a trailing space. Fonts hide characters, numbers do not. The tile strip pairs each character with its code, so you read the string the way a parser does.
Hi, Toolexe in four number systems
The first five characters of the default sample, spelled every way the converter offers:
| Char | Decimal | Hex | Binary | Octal |
|---|---|---|---|---|
H | 72 | 48 | 01001000 | 110 |
i | 105 | 69 | 01101001 | 151 |
, | 44 | 2C | 00101100 | 054 |
| space | 32 | 20 | 00100000 | 040 |
T | 84 | 54 | 01010100 | 124 |
- Decimal matches JavaScript's
codePointAt(), Python'sord(), and most ASCII charts in textbooks. - Hex is what a hex editor shows, what
%20means in a URL, and what\x48means in a C or Python string. - Binary shows the eight bits of each byte. Use this one when you teach how a character becomes a byte.
- Octal survives in Unix file permissions and old C escapes such as
\110for H.
Three ranges worth memorizing
- 48 to 57
- Digits 0 through 9. Subtract 48 to get the digit's value:
7is 55, and 55 minus 48 is 7. Hand-written number parsers in C work this way. - 65 to 90
- Uppercase A through Z.
- 97 to 122
- Lowercase a through z.
Each lowercase letter sits 32 above its capital. A is 65, a is 97. In binary, 01000001 against 01100001, a single bit apart. Plenty of old case-conversion code flips this one bit instead of using a lookup table, which is why the trick breaks on é and every other letter past 127.
Invisible characters get a number too
Whitespace and control characters render as nothing on screen. In the tile strip they turn teal and get a symbol, so a tab never passes for four spaces again.
| Character | Dec | Hex | Tile | Where the character causes trouble |
|---|---|---|---|---|
| Tab | 9 | 09 | ⇥ | Makefiles demand tabs. TSV exports break when an editor swaps tabs for spaces. |
| Line feed | 10 | 0A | ↵ | The line ending on Linux and macOS. |
| Carriage return | 13 | 0D | ␍ | Windows ends lines with 13 then 10. A shell script saved this way fails with a bad interpreter error on Linux. |
| Space | 32 | 20 | ␠ | Trailing spaces in passwords, API keys, CSV headers. |
| Delete | 127 | 7F | ^? | Rare in text. Shows up in terminal paste junk. |
Pasted line breaks always read as 10
Browsers rewrite every line break typed or pasted into a text box as a single 10. Paste a Windows file here and the 13s vanish before the converter sees them. To check real line endings, use Open a file instead. The file is read as saved, so a CRLF file shows 13 10 at each line end, and a byte order mark at the start shows up as 65279.
Copy a phrase out of a web page or a Word document and the gap between two words is often 160, a non-breaking space, not 32. On screen the two look identical. To == or a regex, the two differ. The tile for 160 turns amber. The summary line counts the character as outside ASCII.
Accented letters, emoji, and everything past 127
ASCII stops at 127. The word café ends in é, a letter with no ASCII slot. The converter prints 233, the Unicode code point U+00E9, and marks the tile amber. Emoji sit much higher: 👍 is 128077, or U+1F44D.
A code point is not a byte. Saved as UTF-8, é takes two bytes, C3 A9. The thumbs-up takes four, F0 9F 91 8D. When you need the bytes a file or a network packet holds, the UTF-8 converter is the right page. This one answers which character you have, not how many bytes the character costs.
An earlier version of this page used charCodeAt() and split 👍 into two numbers, 55357 and 56397. Those are UTF-16 surrogate halves, meaningless on their own. The converter now reads whole code points, so one emoji gives one number.
Picking a separator
- Space reads best when a person checks the codes by eye.
- Comma + space pastes straight between brackets as a Python list or a JavaScript array.
- New line gives one code per row, ready for a spreadsheet column.
- None with Hex and Fixed width gives a packed string such as
48692C20546F6F6C657865, the format checksum and hash tools expect.
Where this converter stops
- Code points, not bytes. Anything past 127 comes out as a Unicode number. For UTF-8 or UTF-16 bytes, use a UTF converter.
- No legacy code pages. Windows-1252 agrees with Unicode on é at 233 but puts € at 128, where Unicode has € at 8364. Text pulled from an old system in a code page needs decoding first.
- Packed output and wide characters do not mix. Fixed width pads hex to two digits. é fits, 👍 needs five. A packed hex string with emoji in the input has no clean split points. Use a separator in this case.
- The tile strip draws 500 characters. The output box converts the whole input, no matter the length. The strip stops at 500 tiles to keep phones responsive. For a long log, trust the summary counts, then search the output.
- Plain text files only, up to 2 MB. Open a file reads the file as UTF-8 text. A PDF, an image, or a Word document gives garbage codes. Those belong in a hex viewer.
- One direction only. To turn
72 105back into Hi, use ASCII to Text.
