2015-07-26 3 views
0

Я пишу программу, в которой входные данные (в двоичном формате) разбиваются на две части и преобразуются в целое число для выполнения некоторых вычислений. Так что:Преобразование String (двоичный) в Integer

  1. Принять бинарный вход и магазин, как «String»

  2. Split строка (примечание: следует рассматривать как двоичные) в два раза и преобразовать в целое и хранить в х и у

до сих пор я написал шаг 1.

int main() { 
    string input; 
    cout << "Enter data:"; 
    getline(cin, input); 

    int n = input.size(); 
    int n1 = n/2; 

    string a, b; 
    a = input.substr(0,n1); 
    b = input.substr(n1); 

    cout << "a: " << a; 
    cout << "b: " << b; 
} 

Хотелось бы знать, как достичь шага 2. Заранее спасибо.

+0

http://www.cplusplus.com/reference/cstdlib/atoi/ – Nolan

+0

@Nolane Как Ваш комментарий к делу? Вопрос был о двоичном формате, а 'atoi'" [...] принимает необязательный начальный знак плюс или минус, за которым следует столько ** base-10 ** цифр [...] ". Что касается вопроса - мы не решаем домашние задания здесь. Прочтите это: https://en.wikipedia.org/wiki/Binary_number#Decimal и затем выполните. Это один из самых основных алгоритмов в CS. –

+0

Вопросы, связанные с домашней работой, прекрасны, если вы не просто просите нас сделать шаг для вас. Просто измените свой вопрос, чтобы более точно спросить о том, что о шаге 2 у вас есть проблемы, и убедитесь, что вы включили то, что вы пробовали до сих пор. –

ответ

2

Вы можете попробовать это:

if(a.length() <= sizeof(unsigned int) * 8) { 
    unsigned x = 0; 
    for(int i = 0; i < a.length(); i++) { 
     x <<= 1; // shift byt 1 to the right 
     if(a[i] == '1') 
      x |= 1; // set the bit 
     else if(a[i] != '0') { 
      cout << "Attention: Invalid input: " << a[i] << endl; 
      break; 
     } 
    } 
    cout << "Result is " << x << endl; 
} 
else cout << "Input too long for an int" << endl; 

Он использует

  • shift left<<, чтобы переместить двоичные биты, когда вы идете прямо в строку ASCII;
  • binary or| для установки бит.
0
int bin2dec(char* str) { 
int n = 0; 
int size = strlen(str) - 1; 
     int count = 0; 
while (*str != '\0') { 
    if (*str == '1') 
     n = n + pow(2, size - count); 
    count++; 
    str++; 
} 
return n; 
} 

int main() { 
char* bin_str = "1100100"; 
cout << bin2dec(bin_str) << endl; 
} 
Смежные вопросы