【发布时间】:2011-07-14 01:57:06
【问题描述】:
如何将BitArray 转换为单个int?
【问题讨论】:
-
BitArray 到 int Array 还是字面上的 BitArray 到单个整数?
标签: c# .net binary integer base-class-library
如何将BitArray 转换为单个int?
【问题讨论】:
标签: c# .net binary integer base-class-library
private int getIntFromBitArray(BitArray bitArray)
{
if (bitArray.Length > 32)
throw new ArgumentException("Argument length shall be at most 32 bits.");
int[] array = new int[1];
bitArray.CopyTo(array, 0);
return array[0];
}
【讨论】:
byte数组作为位数组复制的目标,然后使用BitConverter.ToInt32(array, 0)方法。
private int getIntFromBitArray(BitArray bitArray)
{
int value = 0;
for (int i = 0; i < bitArray.Count; i++)
{
if (bitArray[i])
value += Convert.ToInt16(Math.Pow(2, i));
}
return value;
}
【讨论】:
1 << i 而不是Convert.ToInt16(Math.Pow(2, i))?
参考这篇文章 (#43935747)。值 X 很短,我设置了两个位(6 和 10),如下所示: 短 X=1;
var result = X;
var bitsToSet = new [ ] { 5,9 };
foreach ( var bitToSet in bitsToSet )
{
result+=( short ) Math.Pow ( 2,bitToSet );
}
string binary = Convert.ToString ( result,2 );
现在我想从值 X 中读取特定的所有位并将其放入数组或位类型中,例如 bool Val1= bit1, bool Val2=bit2....
我是新手,我认为这对你们来说很简单..
【讨论】:
|= 和(short)(1 << bitToSet) 让它一目了然。并不是说这段代码难以理解,而是它依赖于一些“精心挑选的巧合”的组合,而不是明明做对的事。
这个版本:
实施:
public static ulong BitArrayToU64(BitArray ba)
{
var len = Math.Min(64, ba.Count);
ulong n = 0;
for (int i = 0; i < len; i++) {
if (ba.Get(i))
n |= 1UL << i;
}
return n;
}
【讨论】: