Двоичные литералы в C

#c #string #binary #integer #literals

#c #строка #двоичный #целое число #литералы

Вопрос:

Могу ли я добавить префикс двоичного литерала в c перед введенным пользователем значением int.

 #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 и пропускает остальное

Ответ №1:

По-прежнему нет способа считывания двоичного числа непосредственно из стандартного ввода. Любое автоматическое определение основы не поддерживается "0b" , поэтому stoi() останавливается при 'b' достижении.

Если s std::string это чтение из стандартного ввода ( std::cin >> s; возможно), без "0b" префикса, тогда вы можете использовать

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

проверка указателя end на случай, если в нем присутствуют недопустимые двоичные цифры s .

Обратите внимание, что я использую strtol , а не stoi как int может иметь верхние пределы до 32767.