我想从文件中读取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());
但是这会将输入转换为负数或错误数。
答案 0 :(得分:3)
atoi
用于正常整数。 Windows中还有atol
和atoll
(_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);
并使用您目前拥有的任何文件传输。