How can i convert a string of characters into binary string and back again?

10,698

Solution 1

You can encode a string into a byte-wise representation by using an Encoding, e.g. UTF-8:

var str = "Out of cheese error";
var bytes = Encoding.UTF8.GetBytes(str);

To get back a .NET string object:

var strAgain = Encoding.UTF8.GetString(bytes);
// str == strAgain

You seem to want the representation as a series of '1' and '0' characters; I'm not sure why you do, but that's possible too:

var binStr = string.Join("", bytes.Select(b => Convert.ToString(b, 2)));

Encodings take an abstract string (in the sense that they're an opaque representation of a series of Unicode code points), and map them into a concrete series of bytes. The bytes are meaningless (again, because they're opaque) without the encoding. But, with the encoding, they can be turned back into a string.

You seem to be mixing up "ASCII" with strings; ASCII is simply an encoding that deals only with code-points up to 128. If you have a string containing an 'é', for example, it has no ASCII representation, and so most definitely cannot be represented using a series of ASCII bytes, even though it can exist peacefully in a .NET string object.

See this article by Joel Spolsky for further reading.

Solution 2

You can use these functions for converting to binary and restore it back :

public static string BinaryToString(string data)
{
    List<Byte> byteList = new List<Byte>();

    for (int i = 0; i < data.Length; i += 8)
    {
        byteList.Add(Convert.ToByte(data.Substring(i, 8), 2));
    }
    return Encoding.ASCII.GetString(byteList.ToArray());
}

and for converting string to binary :

public static string StringToBinary(string data)
{
    StringBuilder sb = new StringBuilder();

    foreach (char c in data.ToCharArray())
    {
        sb.Append(Convert.ToString(c, 2).PadLeft(8, '0'));
    }
    return sb.ToString();
}

Hope Helps You.

Share:
10,698
David W
Author by

David W

Updated on June 05, 2022

Comments

  • David W
    David W almost 2 years

    I need to convert a string into it's binary equivilent and keep it in a string. Then return it back into it's ASCII equivalent.