C# 在c中将0和1的数组转换为int

C# 在c中将0和1的数组转换为int,c#,C#,我有以下资料: public int [] PermuteNum(int num) { int[] newArray = new int[16]; string strNum = Convert.ToString(num, 2); int[] bits = strNum.PadLeft(16, '0').Select(c => int.Parse(c.ToString())).ToArray(); for (int i = 0; i < bits.Length; i++) { i

我有以下资料:

public int [] PermuteNum(int num)
{
int[] newArray = new int[16];
string strNum = Convert.ToString(num, 2);
int[] bits = strNum.PadLeft(16, '0').Select(c => int.Parse(c.ToString())).ToArray();

for (int i = 0; i < bits.Length; i++)
{

int newBit = P(i);
int NewNum = bits[newBit];
newArray[i] = NewNum;

}

return newArray;
}

如何将这个1和0的数组转换回初始int?第一个元素是最高有效位。

您可以使用按位移位操作。这是peudo代码,您可以对位移位操作进行研究:

int accumulator = 0;
  int i = 0;
//this assumes your lowest bit is the first one, reverse order if not
foreach(var bit in bits)
{  
  //when you get to the 3rd bit(i==2), if bit is 1 then it represents 2^2 == 8, 
  //to calculate the value of the bit, isntead of using 2^i power, just shift i places

  //Example: the array 1,0,1 becomes 
  // accumulator +=  2^0 // accumulator now == 1
  // accumulator +=  0^1 // accumulator now == 1
  // accumulator +=  2^2 // accumulator now == 4

  accumulator += (shiftbit by i positions);
  ++i;
}

也许您可以使用a,并使用中的答案将其排列转换回int。

这会给我:acculator=7或acculator=0111吗?我不确定在循环运行后,累加器是否会包含整数,谢谢!我得到了一个整数回来,但我关闭,例如我的输入值是47510001 0010 1000 1111置换后,我有125050010001 0101 1001。但累加器变量有39564,这与这里建议的另一个解决方案相同。当我转换包含0011 0001 0101 1001的新数组时,我希望得到12505,我介入查看每个数组的值。即使在我反转后也是如此,因为我首先得到了最重要的位。是的,我看到了这一点,但是我需要对位位置和位数组进行排列,我不知道如何做到这一点。将数字转换成字符串,将每个字符存储到数组中,然后进行位位置置换,这是我在谷歌搜索后发现的更简单的方法,如果我错了,请纠正我!非常感谢。我得到了一个整数,但是我得到了128。例如,我的输入值是47510001 0010 1000 1111,经过排列后,我有125050010001 0101 1001。但结果变量是12633。我已经根据我最新的猜测编辑了我的答案,因为我不确定我是否理解您的要求。我需要理解你的比特表示。newArray[0]是最左边的位吗?是的,它是最左边的位,即最重要的位,经过您的修改,我得到了39564种方法,初始逻辑是正确的。这是我部分的计算错误,我在置换0011 0001 0101 1001后根据我的数据添加了2^7而不是2^8来手动测试它,这解释了为什么正好128关。好的,我编辑了我的答案以包含初始解。让我知道这是否正确,祝你工作顺利。它效率不高,但你可以用移位和设置位操作来考虑,当你遍历源数组时,取1或0,设置位0,然后将字节向左移位
int result = 0;
for (int i = 0; i < newArray.Length; i++)
{
    result *= 2;
    result += newArray[i];
}