привет у меня проблема. Я пытаюсь преобразовать строку типа «12314234» в int , поэтому я получу первое число в строке. из примера строки, которая показана выше, я хочу получить '1' в int. Я попытался: string line = "12314234"; int command = line.at(0);
, но он вводит внутри команду значение ascii 1, а не номер 1. заранее.преобразование строки в int
ответ
Для преобразования числового символа («0
„–“9
„) к соответствующему значению, просто вычтет ASCII код“» 0
из результата.
int command = line.at(0) - '0';
int command = line.at(0) - '0';
Численные значения цифровых символов, которые должны быть рядом друг с другом. Так что это работает везде и всегда. Независимо от того, какой набор символов используется вашим компилятором.
Стандартная функция преобразования ascii в интегральное значение - strtol (строка в длину) из stdlib (#include <cstdlib>
). Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Strtol, а затем ссылку с этой страницы, озаглавленную «Использование strtol правильно и переносимо». С помощью strtol вы можете преобразовать один числовой символ или последовательность числовых символов, и они могут быть несколькими базами (dec, hex и т. Д.).
Да, кроме этого C, а не C++. – alternative
@mathepiC#include
Да, но вам нужно преобразовать 'string' в' char * ' – alternative
я пытаюсь преобразовать строку, как «12314234» в Int
подталкивание имеет библиотеку для этого:
int i = boost::lexical_cast<int>(str);
К сожалению, чтобы присоединиться к этой партии поздно, но что случилось с :
int value;
std::string number = "12345";
std::istringstream iss(number);
iss >> value;
Если вы проходите шестнадцатеричные вокруг (и кто не в эти дни), то вы можете сделать:
int value;
std::string number = "0xff";
std::istringstream iss(number);
iss >> std::hex >> value;
Это C++ и не имеет ни одного из этого хака вычитания ASCii материала.
Путь boost::lexical_cast<>()
хорош и чист, если вы используете boost. Если вы не можете гарантировать, что передаваемая строка будет числом, вы должны поймать заброшенную ошибку.
Стандарт C/C++ не гарантирует ASCII. Они гарантируют, что все числовые коды символов смежны и в порядке поступления, так что «5» - «0» приведет к 5, хотя. –
И это не C++. См. Мой ответ. –