Qt中QString::number转换后toInt得0的问题求助
问题解决:Qt中二进制字符串转int的正确方式
你的猜测没错,toInt()返回0是因为它默认按十进制解析字符串,而"0b11111"里的"b"不是十进制合法字符,解析失败后返回默认值0。Qt的toInt()只自动识别0x前缀的十六进制和0前缀的八进制,不识别0b的二进制前缀,所以可以用以下两种方式处理:
方法一:直接用二进制基数转换(无需0b前缀)
如果你的目标是把数值11111的每一位当作二进制位,转成十进制整数,直接把字符串形式的"11111"用基数2转换即可:
int result = 11111; // 先把int转成字符串"11111" QString binStr = QString::number(result); bool conversionOk; // 指定基数为2,转换为十进制int int decimalResult = binStr.toInt(&conversionOk, 2); // 转换成功的话,decimalResult就是二进制11111对应的十进制31
方法二:处理带0b前缀的字符串
如果必须保留"0b"前缀,可以先截取掉前缀部分再转换:
QString res = "0b11111"; bool conversionOk; // 从索引2开始截取子串,得到纯二进制数字部分"11111" int decimalResult = res.mid(2).toInt(&conversionOk, 2);
额外补充:如果是想把十进制整数转成二进制字符串(而非反向转换),可以直接用QString::number(result, 2),它会返回不带"0b"前缀的二进制字符串,比如QString::number(31, 2)会得到"11111"。
内容的提问来源于stack exchange,提问作者Helkot
相关产品推荐
相关产品推荐

