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