Convert bitmap to uint or similar packed value

I have a large array of booleans and I want to pack / unpack them in uint or a similar value. How can I do this in C #?

+4
source share
3 answers

You can use the BitArray class to convert a bool array to an int array:

 int[] theIntArray = new int[(theBoolArray.Length + 31) / 32]; new BitArray(theBoolArray).CopyTo(theIntArray, 0); 
+4
source

You need to set a series of bit masks (from BIT0 to BIT31, for example, 2 ^ 0 and 2 ^ 32), and then use them using bitwise operators:

 // Initialise byte value = 240; // 11110000 // Clear bit 7 value &= 127; // Result = 112 = 01110000 // Set bit 0 value |= 1; // Result = 113 = 01110001 // Toggle bits 1, 3, 5 and 7 value ^= 170; // Result = 219 = 11011011 

or you can do it with BitArray's:

 BitArray myBitArray = new BitArray(5); // Setup with length 5 myBitArray.SetAll(false); // Set all to false myBitArray.Set(3, true); // Set element 3 on bool is3Set = myBitArray.Get(3); // returns true bool is4Set = myBitArray.Get(4); // returns false 

Learn more about BitArray here at MSDN .

In C / C ++, your bitmask can be written as follows:

 enum Bits { BIT0 = 0x00000001, BIT1 = 0x00000002, BIT2 = 0x00000004, BIT3 = 0x00000008, BIT4 = 0x00000010, BIT5 = 0x00000020, BIT6 = 0x00000040, BIT7 = 0x00000080, BIT8 = 0x00000100, BIT9 = 0x00000200, BIT10 = 0x00000400, BIT11 = 0x00000800, BIT12 = 0x00001000, BIT13 = 0x00002000, BIT14 = 0x00004000, BIT15 = 0x00008000, BIT16 = 0x00010000, BIT17 = 0x00020000, BIT18 = 0x00040000, BIT19 = 0x00080000, BIT20 = 0x00100000, BIT21 = 0x00200000, BIT22 = 0x00400000, BIT23 = 0x00800000, BIT24 = 0x01000000, BIT25 = 0x02000000, BIT26 = 0x04000000, BIT27 = 0x08000000, BIT28 = 0x10000000, BIT29 = 0x20000000, BIT30 = 0x40000000, BIT31 = 0x80000000 }; 
+1
source

This is not the same, but check out this answer, which converts an array of booleans to bytes:

Convert bool [] to byte []

0
source

All Articles