Преобразовать строку символов в двоичную строку и обратно

Можно закодировать строку в побайтовом представлении, используя Encoding, например, UTF-8:

const string str = "Out of cheese error";
byte[] bytes = Encoding.UTF8.GetBytes(str);

Затем вернуть строковый объект .NET:

string strAgain = Encoding.UTF8.GetString(bytes);

Если, необходимо, чтобы представление было в виде серии ‘1’и ‘0’ символов это тоже возможно:

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

Но необходимо подумать, зачем вы это делаете.

Кодировки берут абстрактную строку (в том смысле, что они являются непрозрачным представлением ряда кодовых точек Unicode) и отображают их в конкретную серию байтов. Байты бессмысленны (опять же, потому что они непрозрачны) без кодировки. Но с помощью кодировки их можно снова превратить в строку.

Например, у вас есть строка, содержащая ‘é’ и она не имеет представления ASCII, и поэтому определенно не может быть представлена ​​с использованием последовательности байтов ASCII, даже если она может мирно существовать в string-объекте .NET.

См. статью Джоэла Спольски для дальнейшего чтения.

Полный пример кода представлен ниже:

using System;
using System.Text;
using System.Linq;

namespace Test
{
	class Program
	{
		public static void Main(string[] args)
		{
			const string str = "Out of cheese error";
			byte[] bytes = Encoding.UTF8.GetBytes(str);
			string binStr = string.Join("", bytes.Select(b => Convert.ToString(b, 2)));
			string strAgain = Encoding.UTF8.GetString(bytes);
			Console.WriteLine(binStr);
			Console.WriteLine(str == strAgain);
			
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}