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

C++中如何将二进制字符串转换为十进制整数?

修复二进制字符串转十进制的问题

你的代码存在几个关键问题,逐一修复如下:

1. 修正参数传递方式

当前value是按值传递,函数内的修改不会同步到外部变量。改成引用传递,或者让函数直接返回计算结果:

// 方式1:使用引用传递
void binaryToDec(string binaryString, int& value)
// 方式2:返回计算结果
int binaryToDec(string binaryString)

2. 正确转换字符为数字

字符'0'和'1'的ASCII码分别是48和49,直接用int(binaryString[i])得到的是ASCII值,不是0或1。正确的转换是用字符减去'0':

int bit = binaryString[i] - '0';

3. 修正二进制位的权重计算

二进制字符串的最左侧是最高位,比如"101"的第一位'1'对应2^2,而不是2^0。你的循环从左到右遍历,索引i对应的权重应该是2^(长度-1-i)。另外,避免用pow(返回double可能有精度问题),用整数移位运算更可靠:

// 用移位代替pow,2^n等价于1 << n
int weight = 1 << (binaryStringLength - 1 - i);

4. 修复累加逻辑

原代码里的value += pow(2,i)+ binaryString[i];逻辑错误,应该是value += bit * weight,而非加法。

完整修复后的代码示例

方式1:引用传递版本

void binaryToDec(string binaryString, int& value)
{
    value = 0; // 先重置为0,避免外部初始值干扰
    int binaryStringLength = binaryString.length();
    for (int i = 0; i < binaryStringLength; i++)
    {
        int bit = binaryString[i] - '0';
        int weight = 1 << (binaryStringLength - 1 - i);
        value += bit * weight;
    }
}

方式2:返回值版本

int binaryToDec(string binaryString)
{
    int value = 0;
    int binaryStringLength = binaryString.length();
    for (int i = 0; i < binaryStringLength; i++)
    {
        int bit = binaryString[i] - '0';
        int weight = 1 << (binaryStringLength - 1 - i);
        value += bit * weight;
    }
    return value;
}

额外优化:从右往左遍历(更高效)

可以从字符串末尾开始遍历,每次将当前值左移1位(等价于乘以2),再加上当前位的数字:

int binaryToDec(string binaryString)
{
    int value = 0;
    for (char c : binaryString)
    {
        value = (value << 1) + (c - '0');
    }
    return value;
}

这个版本逻辑更简洁,也避免了计算长度和复杂的权重索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:10:28