Как преобразовать BitArray в single int?
Как я могу преобразовать BitArray
один int
? Самый быстрый способ, пожалуйста...
4 ответов
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];
}
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;
}
Reffering к этому сообщению (#43935747). Значение X короткое tpe, которое я установил два бита (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....
Я новичок и я думаю, что это довольно просто для вас, ребят..
этой версии:
- работает до 64 бит
- не полагается на знание деталей реализации BitArray
- не выделяет память без необходимости
- не бросает никаких исключений (не стесняйтесь добавлять чек, если вы ожидаете больше бит)
- должно быть более чем достаточно производительным
реализация:
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;
}