1

我想知道是否有内置类用于处理二进制数并将任何数字(在本例中为十进制)转换为二进制,反之亦然。例如,如果我想检查第三位是否是1我可以使用&按位运算符,但我觉得如果确实有办法将十进制转换为二进制并检查我想要的位置上的值,它会更简单。我已经搜索并找到了使用示例,BitArray但由于某种原因,它给我一个错误,它不存在,我想知道它是否已过时。我还尝试了 MS 库并找到BitConverter.GetBytes(value)了,但我不确定它的作用是什么,因为当我尝试以下示例时:

  int value = 12345678;
  byte[] bytes = BitConverter.GetBytes(value);
  Console.WriteLine(BitConverter.ToString(bytes));

输出是4E-61-BC-00我不确定实际上是什么。我正在寻找的是如果我喜欢int i = 247; // 11110111然后:

i[0] = 1;
i[1] = 1;
i[2] = 1;
i[3] = 0;
i[4] = 1;
i[5] = 1;
i[6] = 1;
i[7] = 1;

所以我可以得到任何位置的 1 或 0。

i[2] = 1;
4

2 回答 2

3

您应该使用 BitArray,只需确保您使用 System.Collections 添加;到您的 CS 文件。您可以传递一个新的 BitArray 一个 byte[],它将为您处理转换。

http://msdn.microsoft.com/en-us/library/x1xda43a.aspx

于 2012-09-12T16:27:38.167 回答
2

嗯,是的,你可以BitArray从一个创建一个int

int i = 247;
BitArray b = new BitArray(i);

然后你可以检查第三位:

if (b[2])
{
    // the bit is set
}

中的元素BitArrayBoolean,因此要设置第三位,您可以编写:

b[2] = true;

不过,转换回 anint有点痛苦。因为您必须使用CopyTo将 复制BitArrayint[],然后访问 中的第一项int[]

我不明白你为什么要经历头痛。它比使用按位运算符要慢得多,也更麻烦&。您可以轻松地为不同的位值创建常量:

const int bit0 = 0x01;
const int bit1 = 0x02;
const int bit2 = 0x04;
const int bit3 = 0x08;
const int bit4 = 0x10;
// etc.

接着:

if ((i & bit2) != 0)
{
    // the bit is set
}

设置单个位是:

i |= bit2;

稍微重置一下是:

i &= ~bit2;
于 2012-09-12T16:33:22.017 回答