44、数值型数据与字符串的相互转换
数字与字符的相互转换,通常情况下atoi,itoa,但是,这有两个问题,一是:
(1)只能是int与char的转换,也就是说,数据最大值应当小于2G。
(2)在linux中,没有itoa。
那么如何解决数据最大值大于2G,及大于2G后数值型数据与字符间的转换呢?
(1)从数值数据转换成字符型数据,sprintf
unsigned int low = 4294967295;
sprintf(line, "%u", low);
str = line;
ofm.write(str.data(), str.size());
ofm.put('\n');
这样便写入到文件中了。
(2)字符串型数据转换成数据型,流字符串
此时,使用atoi已不能正确转换,因为int的最大正整数为2G,此时,我们使用流字符串。
unsigned int from_str(const std::string& s)
{
std::istringstream is(s);
unsigned int t;
is >> t;
return t;
}
//...
while(ifm.getline(c, 32))
{
str = c;
unsigned int i = from_str(str);
cout << i << endl;
}
当然,上述表达中,要保证从文件中读到的数据是满足你的要求的。