Перевод binary to string

109
18 января 2020, 03:30

Получилось перевести текст в binary, но обратно не получается.

Перевод в двоичный:

 public string StringToBinary(string data)
            {
              StringBuilder sb = new StringBuilder();
              foreach (char c in data.ToCharArray())
                {
                    sb.Append(Convert.ToString(c, 2));
                }
                return sb.ToString();
            }

Обратно делаю так:

StringBuilder sb = new StringBuilder();
        foreach (char c in cent.ToCharArray())
        {
            sb.Append(Convert.ToString(c, 8));
        }
        return sb.ToString();

Во 2ом случае, выводится следущее:

616060616160616...

пару сотен строк, состоящие из этого.

Answer 1

Если я вас правильно понял, то вам нужно перевести ваш текст в двоечную строку, и потом и саму двоечную строку назад в текст. Для перевода текста в двоечный вид нужно знать кодировку вашего текста (UTF8 хватает в большинстве случаев) и перевести текст в массив байтов с нужной кодировкой методом System.Text.Encoding.UTF8.ToBytes(myString);. После чего каждый байт необходимо перевести в двоечную строку:

public static string ToBinaryString(byte[] data)
{
     return string.Join("", data.Select(byt => Convert.ToString(byt, 2).PadLeft(8, '0')));
}

В даном методе происходит следующеё:

  1. Каждый байт перебираеться LINQ-запросом (data.Select(...))
  2. Байт конвертируеться в двоечный код (Convery.ToString(byt, 2))
  3. К конвертированому байту добавляеться приставка в форме нулей если двоечная строка меньше 8 символов (().PadLeft(8, '0');)
  4. И все двоечные строки соединяються в одну методом string.Join("", strings);, где "" это разделитель между строками (в нашем случае он не нужен, поетому пустая строка).

Перевод из бинарной строки в обычную происходит в обратном порядке. Для начала получаем байты:

public static byte[] ToByteArray(string binaryString)
{
    int numOfBytes = binaryString.Length / 8;
    byte[] bytes = new byte[numOfBytes];
    for (int i = 0; i < numOfBytes; i++)
    {
        string oneBinaryByte = binaryString.Substring(8 * i, 8);
        bytes[i] = Convert.ToByte(oneBinaryByte, 2);
    }
    return bytes;
}

Так как в одном байте 8 битов, то в цикле берем подстроки по 8 символов и переводим в байт. Потом методом Encoding.UTF8.GetString(bytesOfNewString); переводим в строку.

Вот вам пример со всем кодом:

public static string ToBinaryString(byte[] data)
{
    return string.Join("", data.Select(byt => Convert.ToString(byt, 2).PadLeft(8, '0')));
}
public static byte[] ToByteArray(string binaryString)
{
    int numOfBytes = binaryString.Length / 8;
    byte[] bytes = new byte[numOfBytes];
    for (int i = 0; i < numOfBytes; i++)
    {
        string oneBinaryByte = binaryString.Substring(8 * i, 8);
        bytes[i] = Convert.ToByte(oneBinaryByte, 2);
    }
    return bytes;
}
static void Main(string[] args)
{
    string originString = "Мой супер текст!";
    Console.WriteLine($"Первоначальная строка: '{originString}'");
    byte[] bytesOfString = Encoding.UTF8.GetBytes(originString);
    string binaryString = ToBinaryString(bytesOfString);
    Console.WriteLine($"Двоечная строка: '{binaryString}'");
    byte[] bytesOfNewString = ToByteArray(binaryString);
    string newOriginString = Encoding.UTF8.GetString(bytesOfNewString);
    Console.WriteLine($"Конвертированя строка из двоечной: '{newOriginString}'");
    Console.ReadKey();
}

Примеры кода взяты из ответов на отдельные тематики:

  • Конвертация строки в двоечную

  • Конвертация двоечной строки в массив байтов

READ ALSO
Фильтрация по dataGrid в wpf c#

Фильтрация по dataGrid в wpf c#

Делаю аис для аэропорта, в рамках курсового проектаДля удобного использования бд решил делать фильтрация в реальном времени

129
Как повернуть изображение в PictureBox на x градусов?

Как повернуть изображение в PictureBox на x градусов?

Необходимо повернуть PictureBox на x градусов при нажатии на кнопкуПока что нашел только поворот через bitmap1

169
Как реализовать Alt+TAB

Как реализовать Alt+TAB

В окне формы ввожу логин и пароль, затем selenium заходит на сайт, авторизуется, забирает необходимые данные и записывает их в comboBox1 на этой же формеПользователь...

124
C++ как располагаются методы?

C++ как располагаются методы?

К примеру есть файлcpp, в нем есть метод, который не относится не к какому пространству method(wchar_t ch) {

122