使用std :: stringstream将boost :: int64_t大数转换为字符串。

时间:2012-10-30 03:30:37

标签: c++ ios

请参阅以下代码,调试和显示转换在iPhone模拟器和设备(4S)上都是成功的,但我想知道它是如何工作的?请参阅http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/,没有boost :: int64_t的重载函数。

如果我使用此函数转换任意boost :: int64_t类型会有任何风险吗?提前致谢。

std::stringstream mySS;
boost::int64_t large = 4294967296889977;
mySS<<large;
std::string str = mySS.str(); 

1 个答案:

答案 0 :(得分:2)

它起作用的原因是boost:int64_t实际上是内置类型的typedef(通常std::int64_t中定义的cstdint或类似的东西),所以它可能最终成为与long long相同(或类似,取决于平台)。当然,stringstream::operator<<有一个超载。

对于确切的定义,最好看boost/cstdint.hpp(1.51版本)。

假设这通常适用于所有主要平台,这可能是一个相对安全的赌注。但我怀疑任何人都能为此提供保证。

如果使用std::stringstream的目的是在整数和字符串之间进行转换,那么最安全的做法就是使用Boost自己的转换方式:boost::lexical_cast(1.51版本)。以下是它的完成方式:

#include <iostream>
#include <boost/cstdint.hpp>
#include <boost/lexical_cast.hpp>

int main()
{
  boost::int64_t i = 12;
  std::string    s = boost::lexical_cast<std::string>(i);

  std::cout << s << std::endl;
  return 0;
}