Last two bits in a BitArray of length 4 are being ignored when converting to int

126 views Asked by At

Consider the following BitArray:

BitArray bitArray = new BitArray(new Boolean[] {true, true, false, false});

and in binary equals:

1100

Now I want to convert this to an int and have tried to use the methods described on this page: How can I convert BitArray to single int?

However, both these methods converts 1100 to 3 instead of 12. So it seems as if it ignores the last two bits and considers it of size 2 bit, for which of course the answer is 3.

One of the methods on the linked page above, in action:

int[] array = new int[1];
bitArray.CopyTo(array, 0);

After executing the above, bitArray has the value 3.

How can I express in the code that I want it to consider all 4 bits?

1

There are 1 answers

0
Jon Skeet On BEST ANSWER

The constructor for BitArray(bool[]) accepts the values in index order - and then CopyTo uses them in the traditional significance (so bitArray[0] is the least significant bit) - so your true, true, false, false ends up meaning 0011 in binary, not 1100.

It's not ignoring the last two bits - it's just treating your initial array in the opposite order to the one you expected.

If you want it to make the first-specified value as the most significant value when converting the bits to integers, you'll need to reverse your input array.