将std :: string转换为特定于MSVC的__int64

时间:2010-01-25 07:38:36

标签: c++

我可以知道如何将std :: string转换为特定于MSVC的__int64?

3 个答案:

答案 0 :(得分:5)

_atoi64, _atoi64_l, _wtoi64, _wtoi64_l

std::string str = "1234";
__int64 v =_atoi64(str.c_str());

另请参阅此链接(尽管适用于linux / unix):Why doesn't C++ reimplement C standard functions with C++ elements/style?

答案 1 :(得分:3)

这是一种方式:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    string s( "1234567890987654321");

    stringstream strm( s);

    __int64 x;

    strm >> x;

    cout << x;

}

答案 2 :(得分:1)

__int64虽然是扩展程序,但仍然只是一种数字类型。使用您通常使用的任何方法。

Boost lexical cast是我最喜欢的。它几乎以一种易于使用的形式包含了Michaels的答案:

__int64 x = boost::lexical_cast<__int64>("3473472936");

如果你不能使用boost,你仍然可以做一个简单的版本。这是我为另一个答案写的一个实现:

template <typename R>
const R lexical_cast(const std::string& s)
{
    std::stringstream ss(s);

    R result;
    if ((ss >> result).fail() || !(ss >> std::ws).eof())
    {
        throw std::bad_cast();
    }

    return result;
}

它会执行一些额外操作,例如检查尾随字符。 ("123125asd"会失败)。如果无法进行强制转换,则抛出bad_cast。 (类似于提升。)

此外,如果您有权访问提升,则可以避免使用特定于MSVC的__int64扩展名:

#include <boost/cstdint.hpp>
typedef boost::int64_t int64;

在提供它的任何平台上获取int64,而无需更改代码。