在c#中将二进制数据转换为字节

时间:2012-02-24 14:11:36

标签: c# bytearray bitarray

我们有一个包含二进制值的文本文件。 比如,我们有一个文件“file.txt”,它包含二进制数据,比如说 11001010 此文件的大小为 8字节。 但我们希望将这些 8字节读取为比特,即 8比特,从而使8比特成为1字节。我们怎么做? 我们只知道程序: 1.取缓冲区并将单个值读入缓冲区 2.如果缓冲区值达到8,则将这8位写入一个字节并写入文件。

提前感谢。

3 个答案:

答案 0 :(得分:3)

给定一个字符串,我怀疑你想要Convert.ToByte(text, 2);

对于多个字节,我认为没有内置任何内容可以将长字符串转换为像这样的字节数组,但如果需要,可以重复使用Substring

答案 1 :(得分:1)

以下代码读取您描述的此类文本文件。如果文件包含多个不能被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 = "";
        }
    }
}

答案 2 :(得分:0)

以防我们讨论字节而不是字符:

        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
            }
        }