You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中QByteArray::indexOf始终返回1的问题排查求助

Qt中QByteArray.indexOf返回值异常的排查

问题代码

QByteArray bItem;
QByteArray alpha("0123456789ABCDEF");
quint8 iItemHi=0, iItemLo=0, index;

QTableWidgetItem *hexItem = new QTableWidgetItem;
hexItem = ui->hexSectorDisplay->item(x,y);
bItem = hexItem->data(Qt::EditRole).toByteArray();

if(bItem.size() == 1) {
    if(index=alpha.indexOf(bItem.at(0), 0) != -1) {
        iItemLo = index;
    } else {
        iItemLo=0;
    }
}

问题描述

上述代码用于从QTableWidget(hexSectorDisplay)单元格读取十六进制字符(1或2个字符),转换为QByteArray后,在alpha中查找字符对应的索引值作为十六进制数值。但无论查找什么字符,alpha.indexOf(bItem.at(0), 0)的返回值始终被识别为1,不符合预期。使用环境为Qt 5.15.2 + MSVC2019。

问题原因

这是运算符优先级导致的错误:!=的优先级高于=,所以代码中的条件表达式会先执行alpha.indexOf(bItem.at(0), 0) != -1,将这个布尔判断的结果(true或false)赋值给index。由于布尔值true在转换为整数时等于1,false等于0,而你每次查找的字符都存在于alpha中,所以判断结果为true,index被赋值为1,而非indexOf的实际返回值。

修正方案

给赋值表达式加上括号,改变运算顺序,先执行赋值再判断:

if( (index = alpha.indexOf(bItem.at(0), 0)) != -1 ) {
    iItemLo = index;
} else {
    iItemLo = 0;
}

这样index会先被赋值为indexOf的实际返回值,再判断该值是否不等于-1,就能得到正确的索引结果。

内容的提问来源于stack exchange,提问作者atari8warez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:35