我正在尝试将int
值数组(每个值代表一个位)转换为其Int32
对象的表示。
我有以下代码:
//0000_0000_0000_0000_0000_0000_0000_1111 = 15
int[] numberData = new int[]
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 1, 1, 1
};
//We convert our int[] to a bool[]
bool[] numberBits = numberData.Select(s => { return s == 0 ? false : true; }).ToArray();
//We generate a bit array from our bool[]
BitArray bits = new BitArray(numberBits);
//We copy all our bits to a byte[]
byte[] numberBytes = new byte[sizeof(int)];
bits.CopyTo(numberBytes, 0);
//We convert our byte[] to an int
int number = BitConverter.ToInt32(numberBytes, 0);
但是,执行此代码后,number
的值为 -268435456 。
为什么会这样?
答案 0 :(得分:3)
位顺序不正确。 -268435456
作为32位整数是11110000 00000000 00000000 00000000
,正如您所看到的,正好与您想要的完全相反。
在将numberBits
数组转换为Int32
之前,只需将其反转。
或者,你可以让numberData
拥有正确的顺序,然后再做任何倒车。
您的代码与您编写的代码完全一致。在numberData[0]
0
,numberData[1]
为0
,......,numberData[31]
为1
。这将导致结果的第0位为0
,第1位为0
,...,第31位为1
。