2

ファイルから数値を読み取り、longそれをインクリメントしてファイルに書き戻したい。との間の変換に
苦労しています。stringlong

私は試した:

double id = atof("12345678901"); //using atof because numbers are too big for atio()
id++;
ostringstream strs;
strs << static_cast<long>((static_cast<double>(threadId)));
string output = strcpy_s(config->m_threadId, 20, strs.str().c_str());

しかし、それは入力を負の数または間違った数に変換します。

4

3 に答える 3

3

atoiは通常の整数用です。andもatolありますatoll( _atoi64Windows の場合):

//long long id = atoll( "12345678901" );
long long id = _atoi64("12345678901"); // for Visual Studio 2010
id++;
// write back to file here

あるコメンターが示唆しているように、関数strtollの代わりに使用します。ato*

char * data = "12345678901";
long long id = strtoull( data, NULL, 10 );
id++;

ここでは C++ を使用しているため、fstream から直接取得する必要があります。

long long id;
{  
   std::ifstream in( "numberfile.txt" );
   in >> id;
}
id++;
{
   std::ofstream out( "numberfile.txt" );
   out << id;
}
于 2012-05-04T06:35:40.580 に答える
2

C文字列(char配列)から移動するには、次を使用します。

long id = atol("12345678901");

これで、番号を増やすことができます。次に、alongからC ++std::stringに移行するには、次を使用します。

std::ostringstream oss;
oss << id;
std::string idAsStr = oss.str();

これで、文字列をファイルに書き戻すことができます。

于 2012-05-04T06:38:58.567 に答える
1

Boost.Lexical_Castにアクセスできますか? 次のように簡単に変換できます。

double id = boost::lexical_cast<double>("some string");
++id
std::string id_string = boost::lexical_cast<std::string>(id);

現在持っているファイル転送を使用します。

于 2012-05-04T08:14:48.517 に答える