C# 将位数组转换为uint或类似压缩值
我有一个很大的布尔数组,我想把它们打包/解包成uint或类似的值。如何在C#中实现这一点?这并不完全相同,但请检查将布尔数组转换为字节的答案:C# 将位数组转换为uint或类似压缩值,c#,bit-manipulation,bit,C#,Bit Manipulation,Bit,我有一个很大的布尔数组,我想把它们打包/解包成uint或类似的值。如何在C#中实现这一点?这并不完全相同,但请检查将布尔数组转换为字节的答案: 您需要建立一系列位掩码(位0到位31,例如2^0和2^32),然后使用位运算符对其进行操作: // Initialise byte value = 240; // 11110000 // Clear bit 7 value &= 127; // Result = 112 = 01110000 // Set bi
您需要建立一系列位掩码(位0到位31,例如2^0和2^32),然后使用位运算符对其进行操作:
// 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
也可以使用BitArray的:
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
阅读更多关于
在C/C++中,可以这样编写位掩码:
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
};
您可以使用
BitArray
类将bool
数组转换为int
数组:
int[] theIntArray = new int[(theBoolArray.Length + 31) / 32];
new BitArray(theBoolArray).CopyTo(theIntArray, 0);
@奥斯汀:哎呀。。用来写第31位的。