【问题标题】:Iterate over all bits of byte in C#遍历 C# 中的所有字节位
【发布时间】:2020-03-18 14:46:09
【问题描述】:

我正在开发一个 C# 应用程序。我有一个字节变量,我想遍历它的所有位。

byte var = 3;
System.Collections.BitArray bits = new System.Collections.BitArray(var);
Console.WriteLine("Length of collection : " + bits.Length);
for (int i = 0; i < bits.Length; i++)
{
    Console.WriteLine(bits[i]);
}

这段代码给了我以下输出:

Length of collection : 3
False
False
False

但由于 3 的二进制表示是 00000011,所以我希望得到以下输出

False
False
False
False
False
False
True
True

我做错了什么?我怎样才能达到所需的输出

【问题讨论】:

  • 你只初始化了长度为3的BitArray...你应该使用BitArray(byte[])构造函数
  • 那我该怎么办? @BiesiGrr
  • 您正在使用的 BitArray 构造函数的方法签名是 BitArray(int length)。因此,当您想说“我想要一个新的 BitArray,它是整数 3 的位”时,您是在说“我想要一个长度为 3 的新 BitArray”。非常不一样。您首先需要获取字节并将其放入。

标签: c# binary byte


【解决方案1】:

您正在调用BitArray(int length) 构造函数:

初始化 BitArray 类的新实例,该实例可以保存指定数量的位值,这些位值最初设置为 false。

因此,您正在创建长度为 3 的 BitArray,而不是包含整数值 3 的位的 BitArray

你想要BitArray(byte[] bytes) 构造函数:

初始化包含从指定字节数组复制的位值的 BitArray 类的新实例。

byte var = 3;
BitArray bits = new BitArray(new byte[] { var });
Console.WriteLine("Length of collection : " + bits.Length);
for (int i = 0; i < bits.Length; i++)
{
    Console.WriteLine(bits[i]);
}

输出:

Length of collection : 8
True
True
False
False
False
False
False
False

【讨论】:

  • 谢谢@canton7,它成功了。还有一件事,为什么我一开始就得到 True ?不应该在最后吗?因为二进制表示是“00000011”
  • @WaleedNaveed 因为它从最低有效位开始索引,而不是最高有效位
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2013-09-13
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多