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

如何将仅含0和1的C++字符串转换为对应二进制值的变量?

将二进制字符串转换为C++数值类型

针对你需要把仅含"0"/"1"的字符串转换为对应二进制数值的需求,以下是几种实用的实现方式:

方法1:利用标准库函数指定基数

C++的stoi、stoll、stoull等字符串转数值函数,支持通过第三个参数指定解析基数。将基数设为2,即可把输入字符串当作二进制解析。

修改你的示例代码如下:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string str_1 = "001";
    string str_2 = "0010";
    string str = str_1 + str_2;
    cout << str << endl;

    // 指定基数为2,将二进制字符串转为int
    int i = stoi(str, nullptr, 2);
    // 若字符串过长,可使用long long类型适配
    long long ll_val = stoll(str, nullptr, 2);
    cout << i << " and " << ll_val << endl;
}

运行后会输出0010010和18 and 18,完全符合你的需求。

注意事项:

  • 若二进制字符串长度超过目标类型的位数(比如int通常为32位),会触发溢出异常,此时可改用更大的类型(如unsigned long long对应stoull)。
  • 若字符串包含非"0"/"1"的字符,函数会抛出invalid_argument异常。

方法2:手动实现二进制转换

如果需要自定义溢出逻辑或处理超长字符串,可以手动遍历字符串计算数值:

#include <iostream>
#include <string>

using namespace std;

unsigned long long binaryToULL(const string& str) {
    unsigned long long result = 0;
    for (char c : str) {
        result <<= 1; // 左移1位等价于乘以2
        if (c == '1') {
            result += 1;
        }
    }
    return result;
}

int main() {
    string str = "0010010";
    cout << binaryToULL(str) << endl; // 输出18
}

这种方式可以灵活添加溢出判断、类型适配等自定义逻辑。

方法3:使用std::bitset(固定长度场景)

如果你的二进制字符串长度固定,可使用std::bitset直接初始化并转换为数值:

#include <iostream>
#include <string>
#include <bitset>

using namespace std;

int main() {
    string str = "0010010";
    // bitset的模板参数需匹配字符串长度(此处为7)
    bitset<7> binary_bits(str);
    cout << binary_bits.to_ulong() << endl; // 输出18
}

该方式适合处理固定位数的二进制数据,比如协议解析、硬件交互场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:10:39