如何将仅含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
相关产品推荐
相关产品推荐

