如何将十进制(整数)转换为二进制,使用二进制文件,然后在C#中将其转换回十进制

时间:2012-09-12 16:25:22

标签: c# bit-manipulation

我想知道是否有内置类用于处理二进制数并将任何数字(在这种情况下为十进制)转换为二进制数,反之亦然。例如,如果我想检查第三位是否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;

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

嗯,是的,您可以从BitArray创建int

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

然后你可以检查第三位:

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

BitArray中的元素是Boolean,所以要设置第三位,你要写:

b[2] = true;

转换回int有点痛苦。因为您必须使用CopyToBitArray复制到int[],然后访问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;