从文件中读取数字,递增和写回

时间:2012-05-04 06:30:41

标签: c++ file casting

我想从文件中读取long个数字然后递增它并将其写回文件。
我正在努力应对从string转换为long并再次回归。

我试过了:

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());

但是这会将输入转换为负数或错误数。

3 个答案:

答案 0 :(得分:3)

atoi用于正常整数。 Windows中还有atolatoll_atoi64):

//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 ++,你应该直接从fstreams中取出它:

long long id;
{  
   std::ifstream in( "numberfile.txt" );
   in >> id;
}
id++;
{
   std::ofstream out( "numberfile.txt" );
   out << id;
}

答案 1 :(得分:2)

要从C字符串(char数组)转到,请使用:

long id = atol("12345678901");

现在您可以增加数字。然后,从long转到C ++ std::string,请使用:

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

现在您可以将字符串写回文件。

答案 2 :(得分:1)

您是否可以访问Boost.Lexical_Cast?您可以像这样进行转换:

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

并使用您目前拥有的任何文件传输。