Преобразование двоичных данных в байты в c # - PullRequest
0 голосов
/ 24 февраля 2012

у нас есть текстовый файл, содержащий двоичные значения. скажем, у нас есть файл "file.txt", он содержит двоичные данные, скажем, 11001010 размер этого файла 8 байт . но мы хотим, чтобы эти 8 байтов читались как биты, т.е. 8 бит и, таким образом, превращали 8 бит в 1 байт. Как мы можем это сделать? мы просто знаем процедуру: 1. взять буфер и прочитать индивидуальное значение в буфер 2.Если значение буфера достигает 8, превратить эти 8 бит в байт и записать в файл.

спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

Учитывая строку, я подозреваю, что вы хотите Convert.ToByte(text, 2);

Для более чем одного байта, я не думаю, что есть что-то встроенное для преобразования длинной строки в байтмассив, как это, но вы можете использовать Substring несколько раз, если хотите.

1 голос
/ 24 февраля 2012

Следующий код читает такой текстовый файл, который вы описываете.Если файл содержит количество двоичных цифр, которые не делятся на 8, посторонние цифры отбрасываются.

using (var fileToReadFrom = File.OpenRead(@"..."))
using (var fileToWriteTo = File.OpenWrite(@"..."))
{
    var s = "";
    while (true)
    {
        var byteRead = fileToReadFrom.ReadByte();
        if (byteRead == -1)
            break;
        if (byteRead != '0' && byteRead != '1')
        {
            // If you want to throw on unexpected characters...
            throw new InvalidDataException(@"The file contains a character other than 0 or 1.");
            // If you want to ignore all characters except binary digits...
            continue;
        }
        s += (char) byteRead;
        if (s.Length == 8)
        {
            fileToWriteTo.WriteByte(Convert.ToByte(s, 2));
            s = "";
        }
    }
}
0 голосов
/ 24 февраля 2012

На всякий случай речь идет о байтах, а не о символах:

        byte output;
        using (var inFile = File.OpenRead("source"))
        {
            int offset = 0;
            var data = new byte[8];
            while (inFile.Read(data, offset, 8) == 8)
            {
                output = (byte)(data[0] << 7);
                output += (byte)(data[1] << 6);
                output += (byte)(data[2] << 5);
                output += (byte)(data[3] << 4);
                output += (byte)(data[4] << 3);
                output += (byte)(data[5] << 2);
                output += (byte)(data[6] << 1);
                output += (byte)data[7];

                offset += 8;

                // write your output byte
            }
        }
...