2011-09-10 9 views
1

C++のデータファイルからいくつかの情報が得られました。 1つの情報は12文字の長い番号です。これを文字列から長文に変換するにはどうすればいいですか(私は長い間、これが最も適していると思います)、データの損失はありませんか?ASCII文字列をlong longに変換する

答えて

5

C++では、データ型がlong longではありません。 It's available in C99。ただし、int64_tを使用できます。 <stdint.h>を含む。

boost::lexical_castを使用して、文字列をint64_tに変換します。

それともとしてコンバート機能を自分で書くことができます。

int64_t convert(const std::string &s) 
{ 
    if(s.size() == 0) 
     std::runtime_error error("invalid argument"); 
    int64_t v = 0; 
    size_t i=0; 
    char sign = (s[0] == '-' || s[0] == '+') ? (++i, s[0]) : '+'; 
    for(; i < s.size(); ++i) 
    { 
     if (s[i] < '0' || s[i] > '9') 
      throw std::runtime_error("invalid argument"); 
     v = v * 10 + s[i] - '0'; 
    } 
    return sign == '-' ? -v : v; 
} 

テストコード:

int main() { 
     try{ 
      std::cout << convert("68768768") << std::endl; 
      std::cout << convert("+68768768") << std::endl; 
      std::cout << convert("-68768768") << std::endl; 
      std::cout << convert("68768768x") << std::endl; 
     }catch(const std::exception &e) 
     { 
      std::cout << e.what() << std::endl; 
     } 
     return 0; 
} 

出力:

68768768 
68768768 
-68768768 
invalid argument 

オンラインデモ:http://ideone.com/nnSLp

0

64ビットのビット整数は、12桁の10進数を表すのに十分です(余裕があります)。したがって、お使いのプラットフォームによっては、longで十分です。その場合はstrtolまたはstrtoulを使用できます。

long longが必要な場合は、strtollstrtoullをご覧ください。

+3

私が言います90%彼はfiする彼が64ビットシステム(または他の特定のコンパイラ)のためにGCCでコンパイルしていない限り、彼のプラットフォーム 'long'では32ビットしかないと言われています – xanatos

+1

しかし、普通のロングで使うためには' strtol'/'strtoul'と言います。 。 –

関連する問題