【发布时间】:2014-12-20 14:09:51
【问题描述】:
我正在尝试将 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。
为什么会这样?
【问题讨论】:
-
我认为没有溢出。 BitArray 共有 32 位,被复制到大小为 4 的 byte[]
-
注意:这是从位创建整数的一种非常冗长的方法。存在更好的方法(也不会受到“字节顺序”问题的影响)
标签: c# c#-4.0 binary integer type-conversion