Kri*_*rco 4 c# bits boolean bytearray bitarray
好吧,所以我有一个字节[],我得到使用
File.ReadAllBytes(filename);
我的问题是我的程序需要将文件中的数据视为一个bool数组.我搜索过,但我没有找到一种方法来获得正确有效的转换.一个例子是:
{ 00101011, 10111010 } ->
{ false, false, true, false, true, false, false, true, true,
false, true, true, true, false, true, false }
Run Code Online (Sandbox Code Playgroud)
我还需要改变程序.
我遇到的大多数解决方案涉及从每个字节中获取一个布尔值.即,得到的数组与数组的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);
}
}
Run Code Online (Sandbox Code Playgroud)
.NET bool"浪费"七位.因此没有直接的方法可以从一个字节转到八个布尔值.
您可以使用BitArray类,请参阅将C#字节转换为BitArray.
所以像这样:
var bytes = File.ReadAllBytes(filename);
var bitArray = new BitArray(bytes);
bool ninthBit = bitArray[8];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |