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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:05:35