转换数组" true,false或0,1"到字节数组然后将其写为文件

时间:2014-12-29 20:32:49

标签: c# binary bit binarywriter

我问一个简单的问题,但我找不到最简单的方法,我的应用程序读取一个小文件,简单的8字节字上传“从8字节文件中读取,将是 0,1 ... 的二进制数组或 true-false 列表,长度 8 * 8 = 64位,现在我已经在字符串数组中有64位并且还有布尔列表,下面的代码更快,我只需要编辑代码,每次给我8位带有 MemoryStream

的1字节.. ****
 string path = openFileDialog1.FileName;
 byte[] file = File.ReadAllBytes(path);
 MemoryStream memory = new MemoryStream(file);
 BinaryReader reader = new BinaryReader(memory);

 for (int i = 0; i <= file.Length - 1; i++)
 {

 byte result = reader.ReadByte();

 }

编辑完这段代码后,我只需要回写这些位

  

01110101-01110000-01101100-01101111-01100001-01100100-01100101-01100100 待上传

到字节然后将其写回有效文件。我真的很累,因为我看到很多方法把一个字节数组写成一个文件而不是一个位......我很累,因为我找不到出路!!

1 个答案:

答案 0 :(得分:0)

您可以使用BitArray constructor accepting a byte array

var bitArray = new BitArray(new byte[] { result });

然后,您可以致电bitArray.Get(n)以获取n字节位置result的位。

至于你的编辑,代码可以简化为:

string output = "";
byte[] fileBytes = File.ReadAllBytes(path);
var bitArray = new BitArray(fileBytes);

// Loop over all bits in the bitarray, containing all bytes read from the file.
for (int i = 0; i < bitArray.Length; i++)
{
    output += bitArray.Get(i) ? "1" : "0";

    // Output a dash every 8 characters.
    if ((i + 1) % 8 == 0)
    {
        output += "-"
    }
}

// Write `output` string to file.