我有一个特定的字节,其中字节中的每个位都取决于其他一些值或信息。特别是,一个字节的格式如下:
Bits 1-3 = 011
Bits 4-7 = binary value of char at that position
Bit 8 = 1 or 0 depending on a 2nd parameter
因此,我想我可以替换如下代码:
if (last == TRUE) {
callsign[j] = 0b01100001;
} else {
callsign[j] = 0b01100000;
}
具有简单的两层衬里:
char mask[];
sprintf("%s%i", 0b1111111, last);
callsign[j] = 0b01100001 & mask;
不幸的是,这种方法不起作用,产生了大量错误,其中包括我无法解读的Attempt to create a pointer to a constant
。
基本上,无论哪种方式,我都需要创建一个由单个位或一组特定位组成的字节。不可避免地,它们将是变量,因此我需要以某种方式将它们连接为一个字节。
我本以为可以使用掩码,但是即使我选择了掩码,我仍然需要以某种方式将参数连接到掩码中。
解决此问题的最佳方法是什么?使用掩码似乎很方便,但是如何通过将变量与二进制结合起来来创建掩码?
答案 0 :(得分:1)
您可以使用“或” |来切换位。和“与”&运算符。
uint8_t some_byte = 0b10000000;
some_byte |= 0b00100000;
// Result: 0b10100000.
some_byte = 0b10000011;
some_byte &= 0b01111111;
// Result: 0b00000011.