将字符范围转换为int

Mic*_*eyn 1 c++ c++11 c++14

假设我们有一个字符范围:

// For example
const char *valueBegin="123blahblah"; // Beginning of value
const char *valueEnd=valueBegin+3;    // One past end of value
Run Code Online (Sandbox Code Playgroud)

...,我想将其转换为int:

int value=...// Given valueBegin and valueEnd, calculate 
             // the number stored starting at valueBegin
Run Code Online (Sandbox Code Playgroud)

有什么好的C++ 11方法可以做到这一点?

显然,您可以创建std::string并使用stoi或将其复制到临时的NUL终止字符数组,然后它很容易(例如,通过atoistrtol).

想想一种不涉及将字符复制到某个临时数组/对象的方法 - 换句话说就是一个就地处理字符数据的函数.

更新:

很多答案,但请在回答之前考虑一下.范围没有NUL终止,因此需要valueEnd.你不知道超出值的是什么(也就是说,valueEnd可能超出了包含该值的缓冲区),所以如果你的答案没有使用valueEnd,那就错了.此外,如果您的答案创建了一个临时std::string对象,则不在此问题的指导范围内.

inf*_*inf 6

用途boost::lexical_cast:

std::cout << boost::lexical_cast<int>(sBegin, 3) << std::endl;
Run Code Online (Sandbox Code Playgroud)

这不会产生任何临时性并支持任何类型的角色范围.它也很快.

如果要避免使用长度说明符,则可以使用boost::iterator_range:

std::cout << boost::lexical_cast<int>(boost::make_iterator_range(begin, end)) << std::endl;
Run Code Online (Sandbox Code Playgroud)