How to translate binary to text
- Paste the binary into Input · Binary. Bytes can be separated by spaces, new lines, commas, semicolons or
|, or not separated at all. - The text appears in Output · Text as you type.
- If you see
�, the bits are not valid UTF-8. Try another Charset under the output, such as ISO-8859-1. - Copy output copies the text. Text → Binary above the tool switches direction, as does Text to Binary.
How to read binary by hand
Each group of 8 bits is one byte. Give every position a value, from 128 on the left down to 1 on the right, and add up the positions that hold a 1:
| Bit | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
01001000 is 64 + 8 = 72, and character 72 in ASCII is H. 01101001 is 64 + 32 + 8 + 1 = 105, which is i.
You rarely need the arithmetic for letters, because ASCII is laid out in a pattern. The first three bits say what kind of character it is, and for letters the last five bits are the position in the alphabet:
| Starts with | Meaning | Examples |
|---|---|---|
010 | uppercase letter | 01000001 A, 01001000 H, 01011010 Z |
011 | lowercase letter | 01100001 a, 01101001 i, 01111010 z |
0011 | digit | 00110000 0, 00111001 9 |
00100000 | space |
So 01000011 ends in 00011, which is 3, the third letter: C. Uppercase and lowercase differ in a single bit, the third from the left.
Formats the translator accepts
| Input | Read as |
|---|---|
01001000 01101001 | 8-bit groups split by spaces or new lines |
01001000,01101001 or 01001000;01101001 | commas, semicolons or | as separators |
0b01001000 0b01101001 | 0b prefixes are ignored |
1001000 1101001 | 7-bit groups, as in classic 7-bit ASCII exercises |
0100100001101001 | one bit string, cut into 8-bit pieces |
All of them decode to Hi. A group shorter than 8 bits is read as one byte, which is why the 7-bit version works. If any group is longer than 8 bits, the tool joins all the bits into one string and cuts that into bytes instead. Anything other than 0, 1 and separators stops the conversion with the position of the bad character; the Show button next to the message selects it in the input.
Binary that is not plain ASCII
ASCII bytes always start with 0. A byte starting with 1 belongs to a multi-byte UTF-8 character, and its leading bits tell you how long the sequence is:
| Character | UTF-8 bits | Pattern |
|---|---|---|
é | 11000011 10101001 | 110 starts a 2-byte character, 10 continues it |
€ | 11100010 10000010 10101100 | 1110 starts a 3-byte character |
👋 | 11110000 10011111 10010001 10001011 | 11110 starts a 4-byte character |
If you decode these one byte at a time you get junk such as é. Keep the bytes together and leave Charset on UTF-8.
From binary to Base64
Binary, hex and Base64 are all ways of writing the same bytes. Binary uses 8 characters per byte, hex 2, Base64 about 1.33, so Base64 is what systems use to move binary data through text: email attachments, JSON fields, data URIs. To turn your bits into Base64 directly, use Binary to Base64. To see the bits inside a Base64 string, use Base64 to Binary; how Base64 works shows how it regroups those bits 6 at a time.
Binary to text in code
bits = "01001000 01101001"
bytes(int(b, 2) for b in bits.split()).decode("utf-8") # 'Hi'
const bits = "01001000 01101001";
new TextDecoder().decode(Uint8Array.from(bits.split(" "), b => parseInt(b, 2))); // 'Hi'
Both assume the groups are separated by single spaces; the tool above is more forgiving about the input format.
FAQ
What does 01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101 mean?
I love you. Each 8-bit group is one ASCII character, and 00100000 is the space between the words.
How many binary digits make one letter?
Eight, one byte, for any letter or digit in plain ASCII text. Accented letters take 16 bits in UTF-8, most other scripts 16 or 24, and emoji 32.
Can I translate binary that has no spaces?
Yes. A continuous string such as 0100100001101001 is cut into 8-bit pieces from the left. Its length has to be a multiple of 8, otherwise the tool reports how many bits it found.
Why does my binary translate into gibberish?
Usually a bit is missing or extra in an unspaced string, which shifts every following byte. Add spaces between the bytes if you can; then one bad group spoils one character and the rest still read correctly.