C++のデータファイルからいくつかの情報が得られました。 1つの情報は12文字の長い番号です。これを文字列から長文に変換するにはどうすればいいですか(私は長い間、これが最も適していると思います)、データの損失はありませんか?ASCII文字列をlong longに変換する
1
A
答えて
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
が必要な場合は、strtoll
とstrtoull
をご覧ください。
関連する問題
- 1. 'unsigned long'をJavaの文字列に変換するには
- 2. 文字列をLongに変換するときのScala NumberFormatException?
- 3. ユニコード文字列をintまたはlongに変換する
- 4. 文字列をstrftimeからint/longに変換する
- 5. Javaバイト配列(long値)をC++でlongに変換する
- 6. バイト配列をlongに変換する
- 7. 関数を使用してsprintfなしでlong long intを文字列に変換する
- 8. 文字列の値をLongに渡す
- 9. VBA Excel文字列配列要素をLong型不一致に変換する
- 10. utmを異なるデータ(データ?)でlong longに変換する
- 11. 'long long'(または__int64)を__m64に変換する方法
- 12. 文字列をASCIIに変換する
- 13. 文字列をAsciiに変換する
- 14. 任意のサイズのunsigned long intをバイト文字列に変換する
- 15. 符号なしlong longからunsigned intに変換する
- 16. C++は引数 '1'〜 'long'の 'long double'を 'long double *'に変換できません。
- 17. unsigned long longをwchar_t *に変換して連結します。
- 18. ASCIIの文字列を文字列に変換する
- 19. Jsonでlong xmlの文字列をJavaで変換する方法
- 20. Scala longから文字列への変換が空白になる
- 21. Stringをlongに変換する
- 22. long intをconst time_tに変換する
- 23. GUIDをlongに変換する
- 24. CURRENCYをlongに変換する
- 25. ストリングをlongに変換する
- 26. 4D VectorをLongに変換する
- 27. java.net.InetAddressをlongに変換する
- 28. longのインライン変換リスト?カンマ区切りを含む文字列に
- 29. 文字列をasciiとasciiに変換する
- 30. マップを反転する[Long、[Long]をマップに設定する[Long、Long]
私が言います90%彼はfiする彼が64ビットシステム(または他の特定のコンパイラ)のためにGCCでコンパイルしていない限り、彼のプラットフォーム 'long'では32ビットしかないと言われています – xanatos
しかし、普通のロングで使うためには' strtol'/'strtoul'と言います。 。 –