Convert bit array to uint or similar packed value

喜欢而已 提交于 2020-01-11 09:23:06

问题


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


回答1:


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

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



回答2:


You need to establish a series of bit masks (BIT0 to BIT31 e.g 2^0 and 2^32) then operate on 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

read more about BitArray's here at MSDN.

In C/C++, you bitmask may be written like this:

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
};



回答3:


This isn't the exact same but check this answer which converts an array of booleans to bytes:

Convert bool[] to byte[]



来源:https://stackoverflow.com/questions/5732237/convert-bit-array-to-uint-or-similar-packed-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!