4 Stimmen

Konvertierung von std::string in MSVC-spezifische __int64

Darf ich wissen, wie ich std::string, in MSVC-spezifische __int64 konvertieren kann?

7voto

_atoi64, _atoi64_l, _wtoi64, _wtoi64_l

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

Siehe auch diesen Link (obwohl er für Linux/Unix ist): Warum implementiert C++ nicht die C-Standardfunktionen mit C++-Elementen/-Stil neu?

3voto

Michael Burr Punkte 320591

Hier ist eine Möglichkeit:

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

using namespace std;

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

    stringstream strm( s);

    __int64 x;

    strm >> x;

    cout << x;

}

1voto

GManNickG Punkte 476445

__int64 ist zwar eine Erweiterung, aber dennoch nur ein numerischer Typ. Verwenden Sie die Methode, die Sie normalerweise verwenden würden.

Boost lexikalische Besetzung ist mein Favorit. Es fasst die Antwort von Michaels in einer einfach zu verwendenden Form zusammen:

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

Wenn Sie Boost nicht verwenden können, können Sie trotzdem eine einfache Version erstellen. Hier ist eine Implementierung, die ich für eine andere Antwort geschrieben habe:

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

Es gibt ein paar Extras, wie z.B. die Überprüfung auf nachgestellte Zeichen. ( "123125asd" scheitern würde). Wenn der Wurf nicht durchgeführt werden kann, bad_cast geworfen wird. (Ähnlich wie bei Boost.)

Wenn Sie Zugang zu boost haben, können Sie außerdem die Verwendung der MSVC-spezifischen __int64 Verlängerung mit:

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

Um die int64 auf jeder Plattform, die dies anbietet, ohne Ihren Code zu ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X