2

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

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

4

3 回答 3

3

atoi适用于普通整数。还有atolatoll_atoi64在windows中):

//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;
}
于 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 回答