10

std::atollfromを使用して文字列をgcccstdlibに変換しています。int64_tその機能は、Windows ツールチェーン (Visual Studio Express 2010 を使用) では利用できないようです。最良の代替手段は何ですか?

stringsへの変換にも興味がありuint64_tます。から取得した整数定義cstdint

4

5 に答える 5

8

MSVC には _atoi64 と同様の機能があります。こちらを参照してください

符号なし 64 ビット型については、_strtoui64を参照してください。

于 2011-07-07T13:01:56.777 に答える
5
  • 文字列ストリームを使用 ( <sstream>)

    std::string numStr = "12344444423223";
    std::istringstream iss(numStr);
    long long num;
    iss>>num;
    
  • ブースト lexical_cast ( boost/lexical_cast.hpp)を使用する

     std::string numStr = "12344444423223";
     long long num = boost::lexical_cast<long long>(numStr);
    
于 2011-07-07T12:27:21.290 に答える
2

パフォーマンス テストを実行して、変換がボトルネックであり、非常に高速に実行する必要があると結論付けた場合、準備ができている関数がない場合は、独自の関数を作成することをお勧めします。これは非常に高速に動作しますが、エラー チェックがなく、正の数のみを処理するサンプルです。

long long convert(const char* s)
{
    long long ret = 0;
    while(s != NULL)
    {
       ret*=10; //you can get perverted and write ret = (ret << 3) + (ret << 1) 
       ret += *s++ - '0';
    }
    return ret;
}
于 2011-07-07T12:54:48.280 に答える
1

Visual Studio 2013 にはついにstd::atoll.

于 2014-09-25T09:52:33.607 に答える
1

strtoullで利用できますか<cstdlib>? C99です。また、C++0x はstoull文字列に対しても直接動作する必要があります。

于 2011-07-07T12:56:15.320 に答える