嘿所以我想知道是否有人可以解释这是如何工作的,我必须从一个字节中检索第3位,这是一个bool值,我对这实际如何工作感到困惑,如果我的语法正确。我一直在谈论如何做到这一点的许多不同的例子。这就是我所拥有的:
if(apdu_parse[0] & (1<<3)){
apdu_bit3 = 1;
}
else if(apdu_parse[0] & (0<<3)){
apdu_bit3 = 0;
}
mpdu -> segmented_message = apdu_bit3;
我认为这样做是为了寻找apdu_parse [0]的第三位确定它是1还是0并相应地存储它。正如我所说,我不断遇到许多不同的例子,我认为我开始将它们混合在一起并且没有工作。 apdu_parse [0]中的值是十六进制值,我不断得到&#93; 93&#39;没有意义。
答案 0 :(得分:1)
第一部分是正确的,但第二部分是错误的。
此:
if(apdu_parse[0] & (1<<3)){
apdu_bit3 = 1;
}
表示&#34; if apdu_parse[0] bitwise-AND:ed with 8 isn't zero", which is fine. It will be true (the
如果will be taken) if
apdu_parse [0]`的第3位设置。
另一半虽然没有任何意义;没有按位与-ON与0是非零的。
我会把它写成:
mpdu->segmented_message = (apdu_parse[0] & (1 << 3)) != 0;
这里与0进行显式比较,以创建true
/ false
值,我认为这比隐含它更清晰。
答案 1 :(得分:0)
您可以简单地写一下:
mpdu->segmented_message = (apdu_parse[0] >> 3) & 1;
如果该位置位,则代码将设置正确的值,但如果未设置该位,则代码将设置错误。
apdu_parse[0] & (0<<3)
将始终生成0。
因此
if (adpu_parse[0] & (0<<3))
以后
总是假的
Value AND 0 EQUALS 0
答案 2 :(得分:0)
mpdu->segmented_message = (apdu_parse[0] & (1<<3)) >> 3