【发布时间】:2016-04-30 00:15:25
【问题描述】:
好的,所以我有一个我可以使用的字节[]
File.ReadAllBytes(filename);
我的问题是我的程序需要将文件中的数据视为布尔数组。
我已经搜索过,但我没有设法找到一种方法来获得正确和有效的转换。
一个例子是:
{ 00101011, 10111010 } ->
{ false, false, true, false, true, false, false, true, true,
false, true, true, true, false, true, false }
我还需要扭转这个过程。
我遇到的大多数解决方案都涉及从每个字节中提取一个布尔值。即,bool[] 的结果数组与byte[] 数组的长度相同,我似乎不明白这怎么可能,8 位如何只产生一个布尔值?
在我的情况下,我需要一个结果数组:bool[bytes.Length * 8].
非常感谢,非常感谢任何帮助。
实施我试图让它工作的解决方案之一,但它在某种程度上是错误的,因为生成的文件,即我读取的文件的副本被损坏:
public static bool[] boolsFromFile(string filename)
{
List<bool> b = new List<bool>();
using (FileStream fileStream = new FileStream(filename, FileMode.Open))
using (BinaryReader read = new BinaryReader(fileStream))
{
while (fileStream.Position != fileStream.Length)
b.Add(read.ReadBoolean());
}
return b.ToArray();
}
public static void boolsToFile(string filename, bool[] bools)
{
using (FileStream fileStream = new FileStream(filename, FileMode.Create))
using (BinaryWriter write = new BinaryWriter(fileStream))
{
foreach (bool b in bools)
write.Write(b);
}
}
【问题讨论】:
-
尝试使用bitwise operations。
-
文件最初是如何制作的。如果文件是使用 BinaryWriter 制作的,那么使用 BinaryReader 读取文件是显而易见的。
-
@Esben 建议以与写入文件相同的方式读取文件,但 BinaryWriter writes bools as bytes as well.
-
@CodeCaster 是的,我试过这个,我认为这是我最好的机会。我设法读取一个文件并重写一个新副本,我写的新文件大小完全相同,但不知何故损坏了。我会错过什么吗?
标签: c# boolean bytearray bits bitarray