哪个有效,itoa还是sprintf?

时间:2011-08-13 00:09:26

标签: c++

我正在构建我的第一个C ++应用程序并选择在此阶段依赖的高效C ++库,这是我正在考虑的设计考虑之一。

因此我想将整数类型转换为字符串并决定是否使用;

sprintf(string, "%d", x);

或者

整合到ASCI

itoa(x, string);

任何人都可以建议这些路线中的哪一种有效且可能为什么?

感谢。

3 个答案:

答案 0 :(得分:14)

他们都很有效率。注意itoa()不是C ++标准的一部分可能更为相关,因此在许多常见的运行时中都不可用。 (特别是,它不是libstdc++的一部分,因此在Mac OS X或Linux上不可用。)

答案 1 :(得分:10)

请勿使用其中任何一种。使用std::stringstream等等。

std::stringstream ss;
ss << x;
ss.str();  // Access the std::string

无论哪种方式,转换为字符串都不太可能成为应用程序执行时间的重要部分。

答案 2 :(得分:0)

从纯算法的角度来看,可以认为itoa会更快,因为sprintf有额外的解析格式描述符字符串的成本。但是,如果没有对实现中的两个函数的成本进行基准测试,那么就会产生非常重要的工作量,这是不可靠的。

这也不是苹果与苹果的比较,因为两种功能都不相同。 sprintf可以比itoa做更多的格式化,除了前者是标准函数而后者不是。

旁白:如果您可以使用C ++ 11,则可以使用to_string返回std::string。如果您想要除十进制以外的表示,您可以这样做:

int i = 1234;
std::stringstream ss;
ss << std::hex << i;       // hexadecimal
ss << std::oct << i;       // octal
ss << std::dec << i;       // decimal

std::bitset<sizeof(int) * std::numeric_limits<unsigned char>::digits> b(i);
ss << b;                   // binary

std::string str = ss.str();