C# 字节[]到bool[]用作标志和副标志a

C# 字节[]到bool[]用作标志和副标志a,c#,boolean,bytearray,bits,bitarray,C#,Boolean,Bytearray,Bits,Bitarray,好的,我有一个字节[],我使用它 File.ReadAllBytes(文件名) 我的问题是,我的程序需要将文件中的数据作为布尔数组处理。 我已经搜索过了,但是我没有找到一个正确有效的转换方法。 例如: { 00101011, 10111010 } -> { false, false, true, false, true, false, false, true, true, false, true, true, true, false, t

好的,我有一个字节[],我使用它
File.ReadAllBytes(文件名)
我的问题是,我的程序需要将文件中的数据作为布尔数组处理。
我已经搜索过了,但是我没有找到一个正确有效的转换方法。
例如:

{ 00101011, 10111010 } ->
            { false, false, true, false, true, false, false, true, true,
              false, true, true, true, false, true, false }
我还需要把程序倒过来

我遇到的大多数解决方案都涉及从每个字节中提取一个布尔值。i、 e,
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);
        }
    }
publicstaticbool[]boolsFromFile(字符串文件名)
{
列表b=新列表();
使用(FileStream FileStream=newfilestream(filename,FileMode.Open))
使用(BinaryReader read=新的BinaryReader(fileStream))
{
while(fileStream.Position!=fileStream.Length)
b、 添加(read.ReadBoolean());
}
返回b.ToArray();
}
公共静态void boolsToFile(字符串文件名,bool[]bools)
{
使用(FileStream FileStream=newfilestream(filename,FileMode.Create))
使用(BinaryWriter write=新的BinaryWriter(fileStream))
{
foreach(bool中的bool b)
写,写(b),;
}
}
。因此,从一个字节到八个布尔值没有直接的方法

你可以用这个,看

比如说:

var bytes = File.ReadAllBytes(filename);
var bitArray = new BitArray(bytes);
bool ninthBit = bitArray[8];
与林克轻松相处

            byte[] input = new byte[] { 0x2b, 0xba };
            Boolean[][] results = input.Select(x => Enumerable.Repeat(x,8).Select((y, i) => ((y >> (7 - i)) & 1) == 0 ? false : true).ToArray()).ToArray();

尝试使用。文件首先是如何制作的。如果文件是用BinaryWriter制作的,那么用BinaryReader读取文件是很明显的。@Esben建议以与写入文件相同的方式读取文件是一个很好的方法,但是BinaryWriter。@CodeCaster是的,我试过了,我认为这是我最好的机会。我设法读了一个文件并重写了一个新的副本,我写的新文件大小完全相同,但不知何故被损坏了。我会错过什么吗?我会说这可能很容易,但肯定不可读。他在找一个位掩码。@CodeCaster的解决方案似乎更合适,更具可读性。在这种情况下,不要猜测此人想要什么。如果他正在寻找一个位面具,那么绝对没有理由做任何转换。一个字节就是一个掩码。是的,但是为什么要经历一个复杂的linq,当有更简单的东西可以使用时?我不能回答你的问题,只有写问题的人才能回答。他说他需要一个布尔数组,所以我给了他一个。