簡體   English   中英

哪個是高效的,itoa 還是 sprintf?

[英]Which is efficient, itoa or sprintf?

我正在構建我的第一個 C++ 應用程序,並在這個階段選擇一個高效的 C++ 庫來依賴,這是我正在考慮的設計考慮之一。

因此,我想將 integer 類型轉換為字符串並決定是否使用;

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

或者

Integer 到 ASCI

itoa(x, string);

誰能建議其中哪一條路線有效,可能是為什么?

謝謝。

他們都很有效率。 注意itoa()不是 C++ 標准的一部分可能更相關,因此在許多常見的運行時中不可用。 (特別是,它不是libstdc++的一部分,因此在 Mac OS X 或 Linux 上不可用。)

不要使用其中任何一個。 使用std::stringstream等等。

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

無論哪種方式,轉換為字符串都不太可能成為應用程序執行時間的重要部分。

從純算法的角度來看,可以說itoa會更快,因為sprintf具有解析格式描述符字符串的額外成本。 但是,如果沒有在實現中對這兩個功能的成本進行基准測試,並且工作量很大,則無法確定。

這也不是蘋果對蘋果的比較,因為這兩個功能是不等價的。 sprintf可以比itoa做更多的格式化,除了前者是標准 function 而后者不是。

另外:如果您可以使用 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM