0

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

提前致谢。

4

3 回答 3

3

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

对于不止一个字节,我认为没有内置任何东西可以将长字符串转换为这样的字节数组,但Substring如果你愿意,你可以重复使用。

于 2012-02-24T14:17:40.847 回答
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 = "";
        }
    }
}
于 2012-02-24T14:22:54.197 回答
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
            }
        }
于 2012-02-24T14:53:36.210 回答