2010-01-25 132 views

回答

3

這裏有一種方法:

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

using namespace std; 

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

    stringstream strm(s); 

    __int64 x; 

    strm >> x; 

    cout << x; 

} 
1

__int64,而延期,仍然是隻是一個數字類型。使用您通常使用的任何方法。

提升lexical cast是我的最愛。它幾乎包紮邁克爾斯答案在一個易於使用的形式:

__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。 (類似於boost)

另外,如果你有機會獲得提升,你可以不用使用MSVC特有__int64擴展與:

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

要獲得int64能夠提供在任何平臺上,而無需更改您的代碼。