如何将char数组转换为整数/双/长类型?

Joe*_*jen -1 c++

可能重复:
如何在C++中将数字转换为字符串,反之亦然

如何将char数组转换为整数/双/长类型-atol()函数?

Cat*_*lus 10

要么是Boost.LexicalCast:

boost::lexical_cast<int>("42");
Run Code Online (Sandbox Code Playgroud)

或者(C++ 11):

std::stoi("42");
Run Code Online (Sandbox Code Playgroud)

另外,不要使用char数组,除非它是互操作的.请std::string改用.也不要使用ato*功能,即使在C中,它们也会按设计破坏,因为它们无法正确发出错误信号.

  • 在SO上引入`std :: stoi`的+1.我以前没见过这个. (4认同)

fre*_*low 5

自己编写这样的函数是一个很好的练习:

unsigned parse_int(const char * p)
{
    unsigned result = 0;
    unsigned digit;
    while ((digit = *p++ - '0') < 10)
    {
        result = result * 10 + digit;
    }    
    return result;
}
Run Code Online (Sandbox Code Playgroud)

当然,您应该更喜欢现实世界代码中现有的库设施.

  • 在这里,我无法进行评论......:P @Alex:如果您能提供此代码的示例,除了它的设计之外,还可以随意分享.否则,退出关于"安全漏洞".这里发生的最多的是他假设这个函数的用户不是白痴,并且已经传递了一个非空指针指向以空字符结尾的字符串.就像你知道的那样,`<string.h>`中的每个函数都是假定的. (2认同)
  • @Alex C++标准保证数字是连续的.所以不,`x - '0'`**不依赖于ASCII表,它只取决于C++标准,我认为这是可以接受的.(参考:§2.3p4"在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个值的值.") (2认同)