itoa() 的 C++ 标准替代方案,用于将 int 转换为以 10 为底的 char*

Posted

技术标签:

【中文标题】itoa() 的 C++ 标准替代方案,用于将 int 转换为以 10 为底的 char*【英文标题】:C++ standard alternative to itoa() to convert int to base 10 char* 【发布时间】:2013-11-17 18:31:25 【问题描述】:

将整数转换为以 10 为底的 char*

std::itoa(ConCounter, ID, 10);

ConCounter 为整数,ID 为 char*,10 为底数

它说 iota 不是 std 的成员,没有 std 它不会被声明。我知道这是一个非标准函数,但我包含了它的所有库,但它仍然看不到它。

有什么方法可以做到以上几点?有什么快速的一号线吗? 我尝试了以下方法;

std::to_string //it's not declared for me when using mingw, it doesn't exist.
snprintf/sprintf //should work but it gives me the "invalid conversion from 'int' to 'char *'"    error
std::stoi //has same problem as iota

【问题讨论】:

to_string 是 a) 在 C++11 中和 b) 在较新版本的 MinGW 中修复。 顺便说一句,std::iotaitoa 完全不同。 @Chris 哪个新版本? This 不会在 MingW g++ (GCC) 4.8.1 上编译 @P0W,我似乎记得它已在主要版本中得到修复,但它绝对适用于 MinGWBuilds 4.8.1。 @chris i.troll.ws/376fe7ab.jpg 【参考方案1】:

试试这个:

#include <sstream>

int i = // your number
std::ostringstream digit;
digit<<i;
std::string numberString(digit.str());

【讨论】:

我添加了这个,我得到一个“从 'constant char*' 到 'char*' 的无效转换”错误 这是因为我删除了字符串部分,只是做了 ID = digit.str().c_str();这就是我收到错误的原因。【参考方案2】:

我建议使用 roybatty 的答案,但我认为 sprintf 也应该可以。我认为当您使用它时,您忘记了格式字符串。应该是:

char buf[16];
std::snprintf(buf, sizeof(buf), "%d", integer);

【讨论】:

我所看到的所有地方都没有被告知“sizeof(--)”部分。似乎这部分使它起作用。谢谢! @nurtul 如果你使用snprintf,你需要它,如果你使用sprintf,你不需要。【参考方案3】:

还有“strtol”功能:http://www.cplusplus.com/reference/cstdlib/strtol/

【讨论】:

strol 与预期相反 哦,对不起 %) A 认为它是问题中的“atoi”。

以上是关于itoa() 的 C++ 标准替代方案,用于将 int 转换为以 10 为底的 char*的主要内容,如果未能解决你的问题,请参考以下文章

是否存在使用编译器指令宏的 itoa 替代方案

itoa函数,sprintf函数

_itoa_s 函数在 Android Studio 本机 C++ 上显示错误

Linux中的itoa功能在哪里?

用于c的itoa工具

什么是 C++ 中 .Net NotSupportedException 最接近的替代方案