你好,我有一个问题,我试图将像“12314234”这样的字符串转换为int
所以我将得到字符串中的第一个数字。
从上面显示的字符串示例我想在int中得到'1'。
我试过了 :
string line = "12314234";
int command = line.at(0);
但是它将ascii值设置为1而不是数字1。
提前谢谢。
答案 0 :(得分:4)
int command = line.at(0) - '0';
数字字符的数值必须彼此相邻。所以这无处不在。无论编译器使用什么字符集。
答案 1 :(得分:3)
要将数字字符('0
' - '9
')转换为相应的值,只需从结果中减去“0
”的ASCII代码。
int command = line.at(0) - '0';
答案 2 :(得分:2)
将ascii转换为整数值的标准函数是stdlib(#include <cstdlib>
)的strtol(字符串到长整数)。有关信息,请参阅http://en.wikipedia.org/wiki/Strtol,然后选择标题为正确且可移植地使用strtol的页面上的链接。使用strtol,您可以转换一个数字字符或一系列数字字符,它们可以是多个碱基(dec,hex等)。
答案 3 :(得分:1)
我正在尝试将类似“12314234”的字符串转换为int
Boost有一个库:
int i = boost::lexical_cast<int>(str);
答案 4 :(得分:1)
很抱歉很晚才加入这个派对但是出了什么问题:
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,boost::lexical_cast<>()
方式很干净。如果你不能保证传递的字符串将是一个数字,那么你应该捕获抛出的错误。