qint8 pos=rc_MCU.indexOf("\0xEB\0x90\0x00\0x01\0x01",0);为什么结果始终为0
时间: 2023-09-26 11:06:34 浏览: 115
在这行代码中,你是在一个 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` 函数返回的值,来进一步排查问题。
相关问题
qint8 pos=rc_MCU.indexOf("\0xEB\0x90\0x00\0x01\0x01",0);//指令设置应答
这是一段 C++ 代码,其中的 `qint8` 是 Qt 框架中定义的一个有符号 8 位整数类型。这段代码的作用是在字符串 `rc_MCU` 中查找 `\0xEB\0x90\0x00\0x01\0x01` 这个子串,并返回它在 `rc_MCU` 中的起始位置。如果在 `rc_MCU` 中找不到该子串,则返回 -1。该子串可能是某种通信协议中的指令设置应答。
qint8 d1=0x00 qint8 d2=0x01 想要把d1和d2放入 qint8 d3的第0位和第1位里
可以通过位运算来实现:
```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 位
```
其中,`|=` 表示按位或赋值操作,`&` 表示按位与操作,`<<` 表示左移操作。
阅读全文