我们有一个包含二进制值的文本文件。比如说,我们有一个文件“file.txt”,它包含二进制数据,比如11001010 ,这个文件的大小是8 个字节。但是我们希望将这8 个字节作为位读取,即8 位,从而将 8 位转换为 1 个字节。我们该怎么做?我们只知道过程: 1.取一个缓冲区并将单个值读入缓冲区 2.如果缓冲区值达到8,则将这8位转换为一个字节并写入文件。
提前致谢。
给定一个字符串,我怀疑你想要Convert.ToByte(text, 2);
对于不止一个字节,我认为没有内置任何东西可以将长字符串转换为这样的字节数组,但Substring
如果你愿意,你可以重复使用。
以下代码读取您描述的此类文本文件。如果文件包含许多不能被 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 = "";
}
}
}
以防万一我们谈论的是字节而不是字符:
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
}
}