Подтвердить что ты не робот

Преобразовать массив char в единый int?

Кто-нибудь знает, как преобразовать массив char в один int?

char hello[5];
hello = "12345";

int myNumber = convert_char_to_int(hello);
Printf("My number is: %d", myNumber);
4b9b3361

Ответ 1

Существуют многообразные способы преобразования строки в int.

Решение 1: Использование функциональности Legacy C

int main()
{
    //char hello[5];     
    //hello = "12345";   --->This wont compile

    char hello[] = "12345";

    Printf("My number is: %d", atoi(hello)); 

    return 0;
}

Решение 2: Использование lexical_cast (наиболее подходящее и простейшее)

int x = boost::lexical_cast<int>("12345"); 

Решение 3: Использование C++ Streams

std::string hello("123"); 
std::stringstream str(hello); 
int x;  
str >> x;  
if (!str) 
{      
   // The conversion failed.      
} 

Ответ 2

Если вы используете C++11, вы, вероятно, должны использовать stoi, потому что он может различать ошибку и разбор "0".

try {
    int number = std::stoi("1234abc");
} catch (std::exception const &e) {
    // This could not be parsed into a number so an exception is thrown.
    // atoi() would return 0, which is less helpful if it could be a valid value.
}

Следует отметить, что "1234abc" неявно преобразован от char[] до std:string перед передачей stoi().

Ответ 3

Используйте sscanf

/* sscanf example */
#include <stdio.h>

int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;

  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);

  return 0;
}

Ответ 4

Короче говоря, вы должны использовать atoi()

ed:

Если вам интересно сделать правильный путь:

char szNos[] = "12345";
char *pNext;
long output;
output = strtol (szNos, &pNext, 10); // input, ptr to next char in szNos (null here), base 

Ответ 5

Я просто оставлю это здесь для людей, заинтересованных в реализации без зависимостей.

inline int
stringLength (char *String)
    {
    int Count = 0;
    while (*String ++) ++ Count;
    return Count;
    }

inline int
stringToInt (char *String)
    {
    int Integer = 0;
    int Length = stringLength(String);
    for (int Caret = Length - 1, Digit = 1; Caret >= 0; -- Caret, Digit *= 10)
        {
        if (String[Caret] == '-') return Integer * -1;
        Integer += (String[Caret] - '0') * Digit;
        }

    return Integer;
    }

Работает с отрицательными значениями, но не может обрабатывать нечисловые символы, смешанные между ними (должно быть легко добавить, хотя). Только целые числа.

Ответ 6

Преобразование ascii в целочисленное значение выполняется с помощью функции atoi().