2009-09-22 38 views
1

我有一个应用程序,需要操纵nybbles,甚至可能在一次甚至个别位。 C#中有一个库可以帮助我吗?操纵Nybbles和更小的C#

+0

半字节是一个完全有效的拼写,但我会删除多余的标签。 – RCIX 2009-09-22 20:38:05

+1

每天学习新东西。但是,nybble与Color不相上下; D – user7116 2009-09-22 20:44:45

回答

5

您可以使用BitVector32来操作32位整数中的位,并使用BitArray来表示一组布尔变量。

而且,它很容易写了几个函数来处理各个位:

public bool GetBitValue(int integer, int bit) { 
    return (integer & (1 << bit)) != 0; 
} 

public bool SetBitValue(ref int integer, int bit, bool value) { 
    if (value) 
     integer |= 1 << bit; 
    else 
     integer &= ~(1 << bit); 
} 
+0

优雅的解决方案,我喜欢它! – ParmesanCodice 2009-09-22 20:43:36

2

库实际上是不必要的

uint myVar = 257; 
const uint SOME_FLAG_A = 256 // 100000000 
const uint SOME_FLAG_B = 16 // 000010000 
const uint SOME_FLAG_C = 1 // 000000001 

if(myVar & SOME_FLAG_A == SOME_FLAG_A) 
    Console.WriteLine("Bit A is set!"); 
else 
    Console.WriteLine("Bit A is not set."); 

if(myVar & SOME_FLAG_B == SOME_FLAG_B) 
    Console.WriteLine("Bit B is set!"); 
else 
    Console.WriteLine("Bit B is not set."); 

myVar = myVar | SOME_FLAG_B; 

if(myVar & SOME_FLAG_B == SOME_FLAG_B) 
    Console.WriteLine("Bit B is set!"); 
else 
    Console.WriteLine("Bit B is not set."); 

if(myVar & SOME_FLAG_C == SOME_FLAG_C) 
    Console.WriteLine("Bit C is set!"); 
else 
    Console.WriteLine("Bit C is not set.");