qint8 d1=0x00 qint8 d2=0x01 想要把d1和d2放入 qint8 d3的第0位和第1位里
时间: 2024-02-01 15:14:04 浏览: 115
可以通过位运算来实现:
```cpp
qint8 d1 = 0x00;
qint8 d2 = 0x01;
qint8 d3 = 0;
d3 |= (d1 & 0x01) << 0; // 将 d1 的第 0 位存入 d3 的第 0 位
d3 |= (d2 & 0x01) << 1; // 将 d2 的第 0 位存入 d3 的第 1 位
```
其中,`|=` 表示按位或赋值操作,`&` 表示按位与操作,`<<` 表示左移操作。
相关问题
qint8 d1=0x00 qint8 d2=0x01 想要把d1和d2放入 qint8 d3的第1和2字节里
你可以使用位运算符来完成这个操作。首先将d1左移8位,然后将d2与d3进行或操作。代码如下:
```
qint8 d1 = 0x00;
qint8 d2 = 0x01;
qint16 d3 = 0x0000;
d3 = (d1 << 8) | d2;
```
这样可以将d1和d2的值存储在d3的第1和2字节里。请注意,这里使用了qint16来存储结果,因为两个qint8类型的值合并后是一个qint16类型的值。
qint8 pos=rc_MCU.indexOf("\0xEB\0x90\0x00\0x01\0x01",0);为什么结果始终为0
在这行代码中,你是在一个 QByteArray 对象 `rc_MCU` 中查找特定字节序列 "\0xEB\0x90\0x00\0x01\0x01" 的第一次出现的位置。如果你的 `rc_MCU` 中没有这个序列,那么 `indexOf` 函数返回的结果应该是 -1。如果你的 `rc_MCU` 中确实存在这个字节序列,那么返回的就是这个序列的起始位置,从 0 开始计数。
可能导致你的代码一直返回 0 的原因有以下几个可能:
1. `rc_MCU` 中确实不存在要查找的字节序列,因此 `indexOf` 函数返回 -1。但是你没有处理这种情况,而是默认返回了 0。
2. `rc_MCU` 中存在要查找的字节序列,但是它在 `rc_MCU` 的开头。因为 `indexOf` 函数返回的是从 0 开始计数的索引值,所以如果你没有将返回值减去 1,那么返回值就是 0。
3. 你的代码实现有问题,需要进一步检查。你可以考虑加入调试语句,打印出 `rc_MCU` 的内容,以及 `indexOf` 函数返回的值,来进一步排查问题。
阅读全文