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。
为什么会这样?
位顺序不正确。 -268435456
作为 32 位整数是 11110000 00000000 00000000 00000000
,如您所见,这与您想要的完全相反。
只需在将numberBits
数组转换为Int32
之前将其反转即可。
或者,您可以使numberData
具有正确的顺序,然后从不执行任何反转。
您的代码完全按照您编写的方式工作。在numberData[0]
中是0
,numberData[1]
是0
,...,numberData[31]
是1
。这将导致结果的第 0 位0
,位 1 0
、...,第 31 位1
。