Как я могу преобразовать строку символов в двоичную строку и обратно? - PullRequest
2 голосов
/ 29 ноября 2011

Мне нужно преобразовать строку в ее двоичный эквивалент и сохранить ее в строке. Затем верните его обратно в эквивалент ASCII.

Ответы [ 3 ]

12 голосов
/ 29 ноября 2011

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

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

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

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

Вы, кажется, хотите, чтобы представление представляло собой последовательность символов '1' и '0'; Я не уверен, почему вы это делаете, но это тоже возможно:

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

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

Вы, кажется, путаете "ASCII" со строками; ASCII - это просто кодировка , которая имеет дело только с кодовыми точками до 128. Если у вас есть строка, содержащая, например, 'é', она не имеет представления ASCII, и поэтому совершенно определенно не может быть представлена ​​с использованием последовательность байтов ASCII, даже если она может мирно существовать в объекте .NET string.

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

1 голос
/ 18 апреля 2017

Вы можете использовать эти функции для преобразования в двоичный файл и восстановления его обратно:

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());
}

и для преобразования строки в двоичный файл:

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();
}

Надежда помогает вам.

0 голосов
/ 29 ноября 2011

Сначала преобразуйте строку в байты, как описано в моем комментарии и в ответе Кэмерон; затем итерация, преобразование каждого байта в 8-значное двоичное число (возможно, с Convert.ToString, заполнение соответствующим образом), затем конкатенация. Для обратного направления, разделенного на 8 символов, выполните Convert.ToInt16, создайте байтовый массив, затем преобразуйте обратно в строку с GetString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...