C# - 从位转换为Int32会生成错误的值

时间:2014-10-24 17:16:35

标签: c# c#-4.0 binary integer type-conversion

我正在尝试将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

为什么会这样?

1 个答案:

答案 0 :(得分:3)

位顺序不正确。 -268435456作为32位整数是11110000 00000000 00000000 00000000,正如您所看到的,正好与您想要的完全相反。

在将numberBits数组转换为Int32之前,只需将其反转。

或者,你可以让numberData拥有正确的顺序,然后再做任何倒车。

您的代码与您编写的代码完全一致。在numberData[0] 0numberData[1]0,......,numberData[31]1。这将导致结果的第0位为0,第1位为0,...,第31位为1