Convert text ⇄ binary code. Switching views keeps your input, the encoding is always stated, and your data never leaves the browser.
Text encoding vs number bases — two different things. The text "42" is two characters and encodes to 00110100 00110010 in ASCII/UTF-8 (a "4" glyph and a "2" glyph). The number 42 is a value, written 101010 in binary. The tool detects which one you mean; the Bases view converts numbers, the Binary view converts text.
Scanning returns exactly the chosen string — Hi with "Original text" selected, or the 0/1 characters with "Binary characters" selected. It encodes what you pick and never converts silently.
Open in the tool → Image · QRBlack = 1, white = 0, read row by row, plus three corner markers so the grid can be located again. QR scanners cannot read it — bring it back with Read dot matrix….
Open in the tool → Image · Dot matrixAn FSK-modulated tone (ggwave, about 4.3 s) you can play and download as WAV — then restore into the input box with Read WAV…. Microphone receiving is planned, not in this version.
Open in the tool → SoundReading binary text means undoing an encoding: the bits were produced by taking each character, turning it into a number, and writing that number in base 2. You reverse that in three steps.
| Step | What you do | Result |
|---|---|---|
| 1. Group into 8-bit bytes | Split the bits into blocks of eight | 01001000 | 01101001 |
| 2. Get each byte's value | Read each byte as a base-2 number (place values 128 64 32 16 8 4 2 1) | 01001000 = 72 · 01101001 = 105 |
| 3. Map values to characters | Look the values up in the ASCII table | 72 = H · 105 = i |
| Result | Hi | |
Worked arithmetic for step 2: 01001000 → 0×128 + 1×64 + 0×32 + 0×16 + 1×8 + 0×4 + 0×2 + 0×1 = 72.
The bit string 101010 and the text encoding of "42" are different things:
If someone hands you bits and says "decode this", they almost always mean encoded text (8 bits per character). If they say "what's this number in binary", they mean the value. Our converter detects which case your input is and states its interpretation in the result header — you can override it with the type selector.
ASCII defines 128 characters (values 0–127) and fits in 7 bits; files store one character per byte, so a leading 0 is added (H = 72 = 01001000). UTF-8 keeps every ASCII character at exactly the same byte value — English text looks identical in ASCII and UTF-8 — and uses 2–4 bytes per character for other scripts. For example the Chinese character 好 is 11100101 10100101 10111101 (3 bytes). That's why "each character is 8 bits" is only true for ASCII-range characters.
01001x00 contains an x. Nothing but 0, 1 and separators belongs in a bit string. Fix: remove or correct the character and check the source again — don't delete the position, replace it with the correct bit.
01001000 0110100 has 15 bits. 15 is not a multiple of 8, so the byte boundaries cannot line up and any "decoding" is meaningless. What the remainder tells you: only that the length is wrong — e.g. 19 bits leaves remainder 3, so you are missing or have 3 extra bits somewhere. It cannot tell you which line lost them; you have to compare against the source, line by line. Our converter refuses to decode in this case, reports the remainder, and flags lines whose length differs from the majority.
Some messages use 7-bit ASCII (7 bits per character, no leading zero). Decoded as 8-bit, the boundaries land in the wrong places and you get garbage or a "not valid UTF-8" error. Fix: if the total bit count divides evenly by 7 but not by 8, try the 7-bit ASCII option (the converter offers it in the error message). Multi-byte UTF-8 that starts mid-character fails the same way — realign to the start of the message.
Practice with verified examples → · Look up characters in the alphabet table →
This table shows how ASCII characters are written in binary. Each character maps to a decimal ASCII value from 0–127, and that value is written with 8 bits (padded with leading zeros). Click any row to copy its 8-bit binary code.
| Character | Decimal (ASCII) | Binary (8-bit) | Hex |
|---|---|---|---|
| A | 65 | 01000001 | 41 |
| B | 66 | 01000010 | 42 |
| C | 67 | 01000011 | 43 |
| D | 68 | 01000100 | 44 |
| E | 69 | 01000101 | 45 |
| F | 70 | 01000110 | 46 |
| G | 71 | 01000111 | 47 |
| H | 72 | 01001000 | 48 |
| I | 73 | 01001001 | 49 |
| J | 74 | 01001010 | 4A |
| K | 75 | 01001011 | 4B |
| L | 76 | 01001100 | 4C |
| M | 77 | 01001101 | 4D |
| N | 78 | 01001110 | 4E |
| O | 79 | 01001111 | 4F |
| P | 80 | 01010000 | 50 |
| Q | 81 | 01010001 | 51 |
| R | 82 | 01010010 | 52 |
| S | 83 | 01010011 | 53 |
| T | 84 | 01010100 | 54 |
| U | 85 | 01010101 | 55 |
| V | 86 | 01010110 | 56 |
| W | 87 | 01010111 | 57 |
| X | 88 | 01011000 | 58 |
| Y | 89 | 01011001 | 59 |
| Z | 90 | 01011010 | 5A |
| a | 97 | 01100001 | 61 |
| b | 98 | 01100010 | 62 |
| c | 99 | 01100011 | 63 |
| d | 100 | 01100100 | 64 |
| e | 101 | 01100101 | 65 |
| f | 102 | 01100110 | 66 |
| g | 103 | 01100111 | 67 |
| h | 104 | 01101000 | 68 |
| i | 105 | 01101001 | 69 |
| j | 106 | 01101010 | 6A |
| k | 107 | 01101011 | 6B |
| l | 108 | 01101100 | 6C |
| m | 109 | 01101101 | 6D |
| n | 110 | 01101110 | 6E |
| o | 111 | 01101111 | 6F |
| p | 112 | 01110000 | 70 |
| q | 113 | 01110001 | 71 |
| r | 114 | 01110010 | 72 |
| s | 115 | 01110011 | 73 |
| t | 116 | 01110100 | 74 |
| u | 117 | 01110101 | 75 |
| v | 118 | 01110110 | 76 |
| w | 119 | 01110111 | 77 |
| x | 120 | 01111000 | 78 |
| y | 121 | 01111001 | 79 |
| z | 122 | 01111010 | 7A |
| 0 | 48 | 00110000 | 30 |
| 1 | 49 | 00110001 | 31 |
| 2 | 50 | 00110010 | 32 |
| 3 | 51 | 00110011 | 33 |
| 4 | 52 | 00110100 | 34 |
| 5 | 53 | 00110101 | 35 |
| 6 | 54 | 00110110 | 36 |
| 7 | 55 | 00110111 | 37 |
| 8 | 56 | 00111000 | 38 |
| 9 | 57 | 00111001 | 39 |
| space | 32 | 00100000 | 20 |
| ! | 33 | 00100001 | 21 |
| ? | 63 | 00111111 | 3F |
| . | 46 | 00101110 | 2E |
| , | 44 | 00101100 | 2C |
| - | 45 | 00101101 | 2D |
| : | 58 | 00111010 | 3A |
| ; | 59 | 00111011 | 3B |
| ' | 39 | 00100111 | 27 |
| " | 34 | 00100010 | 22 |
| ( | 40 | 00101000 | 28 |
| ) | 41 | 00101001 | 29 |
| + | 43 | 00101011 | 2B |
| / | 47 | 00101111 | 2F |
| = | 61 | 00111101 | 3D |
| < | 60 | 00111100 | 3C |
| > | 62 | 00111110 | 3E |
| @ | 64 | 01000000 | 40 |
| # | 35 | 00100011 | 23 |
| $ | 36 | 00100100 | 24 |
| % | 37 | 00100101 | 25 |
| & | 38 | 00100110 | 26 |
| * | 42 | 00101010 | 2A |
Tip: a row is highlighted on hover — click it to copy the 8-bit binary code.
Take the name ANN and look up each letter:
So ANN = 01000001 01001110 01001110 in 8-bit ASCII (3 bytes).
ASCII assigns 65–90 to A–Z, 97–122 to a–z and 48–57 to 0–9. The lowercase letters are exactly 32 more than uppercase (A=65, a=97), which flips one specific bit — that's why a is 01100001 while A is 01000001.
Every example below states the exact input, its type and encoding, and the correct result. Each was computed with standard UTF-8 encoding — not just by this site's own code — and every card opens the converter with that exact input and view preloaded.
For any English text you can verify by hand with the alphabet table: look up each character's value and write it as 8 bits. For characters beyond ASCII (like 好) the UTF-8 encoding takes multiple bytes — the tool states the byte count in its result header so you can tell at a glance which case you're in. See How to read binary code for the full method.
A QR code encodes exactly the string you choose: encode Hi and scanning returns Hi; encode the binary characters 01001000 01101001 and scanning returns that string, which the receiver then decodes once more. In the Image view you pick between the two explicitly — the tool never converts silently.
Signal tones use FSK modulation (ggwave, MIT license): the downloaded WAV can be restored to text with this tool's “Read WAV”. Live microphone receiving is planned and not in this version.
A dot matrix encodes the current bit string row by row with black = 1, white = 0. Matrices generated by this tool can be read back; QR scanners cannot read them, and restoring arbitrary images is not supported.
Is my data uploaded? No. All conversion happens locally in your browser; QR codes, dot matrices and signal tones are generated on your device.
Why does it say “bits cannot be divided by 8”? The bit string is missing or has extra bits; decoding it anyway would only produce garbage. Check it against the source — this tool never pads silently.
Which bases are supported? Decimal, binary, octal and hexadecimal, with arbitrary precision and negative numbers (the view switches automatically based on the input type).