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

本文关键字:错误 Int32 转换 | 更新日期: 2023-09-27 18:27:41

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

为什么会这样?

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

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

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

或者,您可以使numberData具有正确的顺序,然后从不执行任何反转。

您的代码完全按照您编写的方式工作。在numberData[0]中是0numberData[1]0,...,numberData[31]1。这将导致结果的第 0 位0,位 1 0 、...,第 31 位1