Binary to Text

Bits back into words — eight at a time, decoded as UTF-8, with invalid bytes marked instead of silently turned into the wrong character.

Runs 100% in your browserNothing is uploaded to a serverFree forever

Binary

Eight bits at a time

Decoding binary back into text means cutting the stream into bytes and looking each one up. The converter accepts the bits in whatever shape you have them — one long unbroken run, or groups separated by spaces, commas or underscores — and treats every eight bits as one byte. Where the input has no separators it chunks from the right, so a run whose length is not a multiple of eight keeps its low bytes intact and only the leading byte comes up short.

Get the alignment wrong and the output is not slightly wrong, it is unrecognisable. A single stray or missing bit shifts every subsequent byte and turns readable text into a run of unrelated symbols. If your output looks like noise from the first character, the usual cause is a bit count that is not a multiple of eight.

Not every byte is a letter

Values below 32 are control codes, not characters, and they are why a decoded string sometimes has invisible content or line breaks you did not expect:

Byte values that are not letters
DecimalNameBinaryWhat it does
0NUL00000000end of a C string
7BEL00000111the terminal bell
8BS00001000backspace
9TAB00001001horizontal tab
10LF00001010newline on Unix
13CR00001101the other half of a Windows newline
27ESC00011011opens an ANSI escape sequence
32SP00100000a space is a character like any other
127DEL01111111delete, and the last 7-bit code

The pair to watch is 13 and 10. A Windows line ending is both — 00001101 00001010 — while a Unix one is just 10. Binary that decodes with a stray character at the end of every line is usually a CRLF file being read as if it were LF.

When the bytes are not text at all

Binary that came from an image, an archive or an encrypted blob is not going to decode into anything meaningful, and that is not a failure of the converter. This page decodes as UTF-8 and follows the standard's rule for invalid input: every byte that cannot start or continue a valid sequence becomes U+FFFD, the replacement character . So a scattering of means specific bytes were invalid, while a solid wall of them means the data was never UTF-8 text.

Truncation shows up the same way. The euro sign is three bytes; feed in only the first two and you get a replacement character, because a partial sequence is not a character.

Related: text to binary for the return trip, hex to text which is the same job in a more compact notation, and the number base converter.

More developer tools