gpt4 book ai didi

ios - 计算 NSData 中设置的位。也许使用枚举? objective-c

转载 作者:行者123 更新时间:2023-11-28 21:49:16 24 4
gpt4 key购买 nike

我不确定如何解决这个问题。

我有一个接收到的数据字节,它定义了硬件中可用的 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(小尾数法)所以使用的 LED 是白色、绿色和红色。

如果我得到一个 int 值 15,那么所有的 LED 都在使用中,如果它是 7,除了白色之外的所有 LED 都在使用中。

我正在努力解决的问题是评估设置的位然后显示哪些 LED 可用的好方法。

评估设置了哪些位然后将其显示在 NSString 中给用户的最佳方法是什么。

我应该使用下面的枚举然后尝试对其进行评估,我将如何进行评估?

typedef enum {

RedLEDAvailable = 1 << 0,
GreenLEDAvailable = 1 << 1,
BlueLEDAvailable = 1 << 2,
WhiteLEDAvailable = 1 << 3

} LEDStatus;

提前致谢。

最佳答案

是的,每个 LED 都有一个位掩码,然后您可以比较从硬件获得的值以确定哪些 LED 可用。

评估位掩码很容易,您可以使用 &| 运算符将这些位“与”或“或”在一起。

以数字 0001 和 0101(二进制)为例说明其工作原理。如果你 | 将它们放在一起,计算机将依次检查两个数字的每一位,看看是否有一个或两个数字在每个位置都有一个 1,如果是这样,那么 1 会出现在那个位置结果。

如果您将它们& 放在一起,那么只有当两个位掩码都为 1 时,才会将 1 放入该位置。

抱歉,如果这有点乱码,但基本上这意味着 0001 & 0101 = 0001。而 0001 | 0101 = 0101。

这意味着如果你想组合位掩码,你可以使用 | 运算符,如果你想计算它们,你可以使用 & 运算符。

例如:

if ((LEDsAvailable & RedLEDAvailable) == RedLEDAvailable) {
// Red light ready
}
else {
// Red light not ready
}

就将其作为字符串显示给用户而言,您只需创建一个 NSMutableString 并根据位掩码的计算方式附加适当的消息。

关于ios - 计算 NSData 中设置的位。也许使用枚举? objective-c ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com