C++随着时间的推移不断发展,其中包括将int转换为字符串的方法。
我将在这个答案中提供一个总结。
请注意,有些方法不直接给你一个std::string,而是一个char*。你可以很容易地将char*转换为前者,在某些情况下,避免使用std::string是有益的。
比较
下表比较了所有选项(只包括C++标准选项,没有第三方库),从最新到最旧。
推荐做法
如果你只需要将一个整数转换为十进制字符串,可以使用std::to_string
。它简单、优雅且正确。
如果无法使用std::to_string
,根据你所需的功能选择另一种选项。更倾向于使用像std::to_chars
这样的现代解决方案,而不是像std::sprintf
这样的旧解决方案。
示例
std::format
std::string d = std::format("{}", 100);
std::string h = std::format("{:#x}", 15);
std::to_chars
std::array<char, 5> a;
auto [ptr, ec] = std::to_chars(a.data(), a.data() + a.size(), 1234);
std::string_view view(a.data(), ptr);
std::string s(a.data(), ptr);
std::to_string
std::string d = std::to_string(100);
std::ostringstream
std::string d = (std::ostringstream() << 100).str();
std::string h = (std::ostringstream() << std::hex << 15).str();
sprintf
/ snprintf
char a[20];
sprintf(a, "%d", 15);
snprintf(a, sizeof(a), "%#x", 15);
std::string s = a;
itoa()
需要三个参数。 - arkon