【问题标题】:how to add two bits into a hex如何将两位添加到十六进制
【发布时间】:2012-08-10 11:55:06
【问题描述】:

我有两个字节,我设置不同的位以获得不同的组合。 例如,字节 1 位 7 和字节 2 位 1、位 2 使组合设备就绪。 现在,我已经创建了面具

#define C1_device_ready   (0x80 | 0x100 | 0x200)

然后我读取数据并尝试比较。 对于 1 个字节,我可以做到(数据 [0] 和掩码 == 掩码)。 但是我如何为有两个字节 data[0] 的 C1_device_ready 掩码计算它 和数据[1]。 是否很容易或者我应该只在单个字节中进行屏蔽。 ::add::data 是无符号字符数据[2]

【问题讨论】:

    标签: c++ c hex bits


    【解决方案1】:

    如果dataunsigned char 的数组,你可以测试

    if ((data[0] & mask) == (mask & 0xFF) && (data[1] & mask) == ((mask >> 8) & 0xFF))
    

    或将两个data[i]结合起来检查

    if (((data[0] | (data[1] << 8)) & mask) == mask)
    

    【讨论】:

    • 谢谢你的作品。您能否解释一下位移(
    • data[0] | (data[1] &lt;&lt; 8)data 数组中的两个字节组合成一个 intdata[0] 在最低有效字节中,data[1] 在第二低有效字节中调动,转移。由于位操作&lt;&lt;| 会自动进行整数提升,因此无需手动插入转换为更大的类型。
    【解决方案2】:

    使用

    if (((data[0] | (data[1] << 8)) & mask) == mask) {
        // do something
    }
    

    【讨论】:

      【解决方案3】:
      ((data[0] | (data[1]<<8)) & mask) == mask
      

      应该可以。可能需要将事物转换为unsigned int

      【讨论】:

        【解决方案4】:

        试试:

        if ((*(short *)data) & C1_device_ready)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          • 2013-02-18
          • 2011-12-09
          • 1970-01-01
          相关资源
          最近更新 更多