C ++中的二进制文字

问题描述

我可以在用户输入int值之前在c ++中添加二进制文字前缀。

#include <iostream>
using namespace std;

int main () {
 int n1;
 cin>>n1;
 string s1 = to_string(n1); 
  string s2 = "0b";
string s=s2+s1;
int n=stoi(s);
cout<<n;
return 0;
}

我尝试了此操作,但失败了,因为stoi()仅读取0并跳过其余部分

解决方法

仍然无法直接从标准输入中读取二进制数。基数的任何自动检测均不支持"0b",因此当到达stoi()'b'停止。

如果s是从标准输入(也许是std::string)读取的std::cin >> s;没有"0b"前缀,那么您可以使用

#include <cstdlib>
char* end;
long n = std::strtol(s.c_str(),&end,2/*radix of 2 denotes binary*/);

检查指针end,以防s中有无效的二进制数字。

请注意,我使用strtol而不是stoi作为int的上限可以小到32767。