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

标签 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;

不幸的是,这不起作用,产生了大量错误,其中有一个尝试创建指向常量的指针,我无法破译。

本质上,无论哪种方式,我都需要创建一个由按特定顺序的各个位或位组组成的字节。不可避免地,它们将是变量,并且我需要以某种方式将它们连接成一个字节。

我认为掩码是正确的选择,但即使我选择掩码,我也需要以某种方式将参数连接到掩码中。

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

最佳答案

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

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

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

关于c - 如何将变量合并到位掩码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311951/

相关文章:

在此 C 编程案例中,C99 命令行不打印任何内容

c++ - 如何将 char 数组插入到 float vector 中

javascript - 为什么我们需要在 switch 语句中分支时对位字段执行按位与

c - 指向成员属性的指针

c - 查找 OpenGL 垂直回扫时序

c++ - 在 Visual Studio 中返回长 double 值

java - java中基数10到基数2,8,16的转换

algorithm - 使用 Octave/Matlab 将多个靠近的 Blob 组合成一个 Blob

bit-manipulation - N 选择带有位掩码的 K 位排列

c++ - 根据掩码合并位序列a和b