2010-01-25 8 views

Répondre

3

est ici une façon:

#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, tandis qu'une extension, est encore juste un type numérique. Utilisez la méthode que vous utiliseriez généralement.

Boost lexical cast est mon préféré. Il enveloppe assez bien Michaels réponse sous une forme facile à utiliser:

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

Si vous ne pouvez pas utiliser boost, vous pouvez toujours faire un très bon travail de faire une version simple. Voici une implémentation que j'ai écrite pour une autre réponse:

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; 
} 

Il fait quelques extras, comme la vérification des caractères de fin. ("123125asd" échouerait). Si la distribution ne peut pas être effectuée, bad_cast est lancée. (Similaire à augmenter.)

En outre, si vous avez accès à stimuler, vous pouvez éviter la nécessité d'utiliser l'extension MSVC spécifique __int64 avec:

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

Pour obtenir int64 sur une plate-forme qui lui fournit , sans changer votre code.

Questions connexes