我不知道如何解决这个问题。
我收到了一个数据字节,用于定义硬件中可用的哪些颜色LED。
红色,绿色,蓝色和白色有4个LED。
bit 0 = Red (1 On | 0 Off)
bit 1 = Green (1 On | 0 Off)
bit 2 = Blue (1 On | 0 Off)
bit 3 = White (1 On | 0 Off)
bit 4 = Unused / Future Use
bit 5 = Unused / Future Use
bit 6 = Unused / Future Use
bit 7 = Unused / Future Use
如果从硬件获得int值11,则位掩码为:0000 1011(Little Endian),因此使用的LED为白色,绿色和红色。
如果我得到一个int值15,那么所有的LED都在使用中,如果它是7,那么除了白色外都在使用。
我想要解决的问题是评估所设置的位然后显示哪些LED可用的好方法。
评估设置哪些位然后以NSString形式显示给用户的最佳方法是什么。
我是否应该使用如下的枚举,然后尝试评估,我将如何进行评估?
typedef enum {
RedLEDAvailable = 1 << 0,
GreenLEDAvailable = 1 << 1,
BlueLEDAvailable = 1 << 2,
WhiteLEDAvailable = 1 << 3
} LEDStatus;
提前致谢。
答案 0 :(得分:2)
是的,每个LED都有一个位掩码,然后您可以比较从硬件获得的值,以确定哪些LED可用。
评估位掩码非常简单,您可以使用&
或|
运算符来&#34;和&#34;或&#34;或&#34;这些比特在一起。
作为其工作原理的示例,取数字0001和0101(二进制)。如果你|
将它们放在一起,计算机会依次查看每个数字,看看两个数字中的一个或两个数字在每个位置是否为1,如果是这种情况,则结果会在该位置进行1。 / p>
如果你&
他们在一起,那么只有当BOTH位掩码中有1时,才会将1放在该位置。
很抱歉,如果这有点乱,但基本上这意味着0001&amp; 0101 = 0001.和0001 | 0101 = 0101。
这意味着如果您想要结合位掩码,可以使用|
运算符,如果要对它们进行求值,可以使用&
运算符。
E.g:
if ((LEDsAvailable & RedLEDAvailable) == RedLEDAvailable) {
// Red light ready
}
else {
// Red light not ready
}
在将此字符串显示给用户方面,您只需创建NSMutableString
并根据位掩码的评估方式附加相应的消息。