Skip to content
TextLab

Free binary translator

Binary translator that reads both directions

Paste a row of 0s and 1s and this translator reads them back as words; type words and it writes the digits. It is free to use, opens without an account, and asks you one question — which encoding the digits belong to, out of UTF-8, UTF-16, Latin-1, 8-bit and 7-bit ASCII — because a single group of eight means different things under each. A second panel treats binary as a number rather than a letter and converts it to decimal and hexadecimal.

  • 100% free
  • No signup
  • Decodes and encodes
  • 5 encodings
  • Binary to decimal and hex
What the digits say

Binary as a number, not as letters

Feed 1011 in here and you get 11 and B, because these digits are being counted rather than looked up in a character table.

How to translate binary

Three steps, and the second is the one people skip.

  1. Pick the direction, then paste

    The page opens on Binary → text, because most people arrive holding digits somebody else sent them; the second button turns it around. Spacing in the input does not matter — 01001000 01101001, 0100100001101001 and 01001000,01101001 are all read the same way. The button marked Send the result back through moves a finished translation into the input box and flips the direction, which is how you check that a message survives the round trip.

  2. Say which encoding the digits belong to

    The menu on the right decides how many digits make one character and which table those numbers are looked up in: UTF-8 for anything written this century, Latin-1 for older Western European text, 8-bit or 7-bit ASCII for plain English, UTF-16 for digits that came out of Windows or Java. Change it and the same input produces a different sentence, which is exactly the point — nothing inside a row of 0s and 1s records the table it was written against.

  3. Read the result, or send a plain number to the panel below

    The lower box shows the translation with a count of groups in and characters out, and anything malformed is named by position rather than rejected as a whole: “Group 6 is 0110001 — 7 digits where UTF-8 wants 8” points straight at the missing digit. The second card treats digits as arithmetic instead of letters, so 11010110 returns 214 and D6, and typing a decimal or hexadecimal number there converts it the other way at any length.

Technical specifications

DirectionsBinary → text and text → binary; the page opens in decode mode, and one button pushes a finished result back through the other way
EncodingsUTF-8 (1 to 4 groups a character), UTF-16 big-endian (16 digits a group), Latin-1 (8 digits, 0 to 255), 8-bit ASCII and 7-bit ASCII (0 to 127)
Separators acceptedSpaces, tabs, line breaks, non-breaking spaces, commas, semicolons, periods, hyphens, underscores, pipes and slashes; a 0b written in front of a group is dropped
Unspaced inputOne long run is cut into groups by itself whenever its length divides evenly — 4,096 unbroken digits become 512 eight-bit characters
Errors reportedStray characters by 1-based position, short or leftover runs by where the run began, and broken UTF-8 by group number: continuation without a lead, overlong form, half a surrogate pair
Number conversionBinary, decimal and hexadecimal in any direction through BigInt, so a 4,096-digit binary number converts exactly rather than rounding above 2^53
Price and limitsFree to use, no account, no daily quota; 100,000 characters of English become 800,000 digits and translate in roughly 40 ms
Where it runsEvery translation happens inside this browser tab — no digits are uploaded to a server

Frequently asked questions

How do I turn a row of 0s and 1s back into words?

Paste the digits into the top box with the page set to Binary → text and the sentence appears underneath. Spacing is optional, because an unbroken run is cut into groups automatically whenever its length divides evenly by 8, 7 or 16. If what comes back is gibberish rather than English, the encoding menu is on the wrong setting — try UTF-8 first, then Latin-1, which is what most pre-2005 Western European text was written in.

Why does the same binary give different words under different encodings?

Because a group of digits is only a number, and each encoding hands that number to a different table. The pair 11000011 10101001 is 195 followed by 169: UTF-8 reads the two together as the single letter é, Latin-1 reads them as two separate characters à and ©, and 8-bit ASCII refuses both because its numbering stops at 127. Nothing in the digits themselves says which table was used, which is why every decoder has to be told or has to guess.

What does “Group 6 is 0110001 — 7 digits where UTF-8 wants 8” mean?

One group is the wrong length, which nearly always means a digit was lost in copying. Counting groups from the left, number 6 arrived with seven digits instead of eight, and the message also gives the position in the box where that run starts so you can find it without counting by hand. The usual culprits are a chat app collapsing two spaces into one and a forwarded message that got clipped at the end of a line.

My UTF-8 fails with a message about continuation groups. What went wrong?

A multi-byte character has lost its opening group, which is what happens when digits are copied starting from the middle. In UTF-8 the first group of a long character begins 110, 1110 or 11110 and every group after it begins 10, so a group starting 10 with nothing in front of it cannot belong to anything. Scroll back and check you copied from the start, or switch to Latin-1, which accepts any eight digits at all and will at least show you what the bytes contain.

Can it translate binary with no spaces in it?

Yes, provided the number of digits divides evenly by the group size — 40 digits split into 5 UTF-8 characters, while 41 digits split into nothing and produce a message naming the position where the run began and how many digits are spare. The trap worth knowing is unspaced 7-bit: a string of 56 digits reads as 7 characters at eight bits each and as 8 characters at seven bits each, and both readings can look plausible. When a message matters, keep the spaces in.

How do I convert a binary number like 101101 to decimal?

Type it into the number panel underneath the translator with the menu on Binary, and 45 appears beside it along with the hexadecimal 2D. That panel adds the digits up as a number rather than looking them up as a character, which is a genuinely different question from the one at the top of the page: 01000001 is the letter A and the number 65 at the same time. The arithmetic uses BigInt, so a 500-digit binary number converts exactly instead of losing precision the way ordinary JavaScript numbers do past 2^53.

Is 7-bit binary still worth knowing about?

Rarely in practice, but it turns up constantly in coursework and in older telecoms material. ASCII was published in 1963 with seven bits and therefore 128 numbered slots, the highest being 127; the eighth bit on early hardware was spare and usually spent on a parity check that caught line noise. Text today is byte-aligned, so the 7-bit setting here is mostly for reading material written before the byte settled the argument.

Why a row of 0s and 1s does not say what it means

One binary digit is a single switch: off or on, 0 or 1. Line eight of them up and there are 256 possible patterns, enough to give every letter, digit and punctuation mark in English its own number with room left over — and eight bits have been the standard byte since IBM built the System/360 around them in 1964. Eight was not inevitable. The ASCII standard published a year earlier used seven bits and 128 slots, and the machines of the era were built around 6-, 9-, 12- and 36-bit words. The byte won because eight is a power of two, splits cleanly into two hexadecimal digits, and left one spare bit that hardware could spend on error checking — which is why this translator still offers a 7-bit setting, and why every other setting counts in eights.

Those 128 ASCII slots cover unaccented English and nothing else: 95 printable characters and 33 invisible control codes inherited from teleprinters. Everything the rest of the world writes had to go somewhere, and for two decades that somewhere was a patchwork of rival 256-slot tables — Latin-1 for Western Europe, others for Greek, Cyrillic and Hebrew — so the same byte meant é in one country and something else entirely in the next. UTF-8 ended the patchwork by letting characters vary in length: the original 128 keep their single byte, accented Latin letters take two, most Chinese, Japanese and Korean characters take three, and emoji take four, because emoji are numbered above U+FFFF where three bytes run out of room. A waving hand really is 32 digits, and the text to binary converter lays those four groups out beside the character if you want to see which is which.

None of that is recorded inside the digits. A message written in binary carries the numbers and nothing else, so the reader has to supply the encoding, and supplying the wrong one produces the mangled é that everyone has met in a badly imported spreadsheet. It also means one string can have two correct readings depending on the question being asked: 01000001 is the letter A if you look it up in a character table and the number 65 if you add it up, and that is the reason the second card on this page does arithmetic on its own. Hexadecimal is those same numbers in shorter clothing, two digits a byte instead of eight, and the text to hex converter writes them that way. If what you are actually holding is dots and dashes rather than digits, the Morse code translator is the neighbouring page.

What happens to the digits you paste

The digits in the top box are read by JavaScript that came down with this page and then runs on your own machine, so nothing is uploaded, nothing is logged and nothing is kept for your next visit. The same holds for the number panel underneath. If you are decoding something you would rather not hand to a website — a private message, a puzzle answer, an exercise you are meant to solve yourself — this is the arrangement you want, and closing the tab is the entire cleanup procedure.