如何将变量合并到位掩码中?

时间:2019-08-01 15:03:24

标签: c binary bitmask

我有一个特定的字节,其中字节中的每个位都取决于其他一些值或信息。特别是,一个字节的格式如下:

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

基本上,无论哪种方式,我都需要创建一个由单个位或一组特定位组成的字节。不可避免地,它们将是变量,因此我需要以某种方式将它们连接为一个字节。

我本以为可以使用掩码,但是即使我选择了掩码,我仍然需要以某种方式将参数连接到掩码中。

解决此问题的最佳方法是什么?使用掩码似乎很方便,但是如何通过将变量与二进制结合起来来创建掩码?

1 个答案:

答案 0 :(得分:1)

您可以使用“或” |来切换位。和“与”&运算符。

uint8_t some_byte = 0b10000000;
some_byte |= 0b00100000;
// Result:   0b10100000.

some_byte  = 0b10000011;
some_byte &= 0b01111111;
// Result:   0b00000011.