itoa()
是一个非常方便的函数,可以将数字转换为字符串.Linux似乎没有itoa()
,是否有相同的功能或我必须使用sprintf(str, "%d", num)
?
编辑:对不起,我应该记得这台机器绝对是非标准的,插入了各种非标准的libc
实现用于学术目的;-)
正如itoa()
几个有用的评论者所提到的那样,确实是非标准的,最好使用sprintf(target_string,"%d",source_int)
或(更好的是,因为缓冲区溢出是安全的)snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
.我知道它不是那么简洁或酷itoa()
,但至少你可以写一次,随处运行(tm);-)
你说的是默认gcc libc
不包括itoa()
,就像其他几个平台一样,因为它在技术上不是标准的一部分.请点击此处获取更多信息.请注意,你必须
#include
当然,你已经知道这一点,因为你想使用 itoa()
大概使用它在其他平台上后,在Linux上,但...代码(从上面的链接被盗)将如下所示:
例
/* itoa example */ #include#include int main () { int i; char buffer [33]; printf ("Enter a number: "); scanf ("%d",&i); itoa (i,buffer,10); printf ("decimal: %s\n",buffer); itoa (i,buffer,16); printf ("hexadecimal: %s\n",buffer); itoa (i,buffer,2); printf ("binary: %s\n",buffer); return 0; }
输出:
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110
希望这可以帮助!
如果你经常调用它,"只使用snprintf"的建议可能很烦人.所以这就是你可能想要的:
const char *my_itoa_buf(char *buf, size_t len, int num) { static char loc_buf[sizeof(int) * CHAR_BITS]; /* not thread safe */ if (!buf) { buf = loc_buf; len = sizeof(loc_buf); } if (snprintf(buf, len, "%d", num) == -1) return ""; /* or whatever */ return buf; } const char *my_itoa(int num) { return my_itoa_buf(NULL, 0, num); }
itoa
不是标准的C函数.你可以实现自己的.它出现在第60页的Kernighan和Ritchie的 C编程语言的第一版中.第二版的C编程语言("K&R2")包含了itoa
第64页的以下实现.该书指出了这个实现的几个问题. ,包括它没有正确处理最负数的事实
/* itoa: convert n to characters in s */ void itoa(int n, char s[]) { int i, sign; if ((sign = n) < 0) /* record sign */ n = -n; /* make n positive */ i = 0; do { /* generate digits in reverse order */ s[i++] = n % 10 + '0'; /* get next digit */ } while ((n /= 10) > 0); /* delete it */ if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); }
reverse
上面使用的函数先前实现了两页:
#include/* reverse: reverse string s in place */ void reverse(char s[]) { int i, j; char c; for (i = 0, j = strlen(s)-1; i
4> Mark Ransom..:编辑:我刚刚发现
std::to_string
哪个操作与我自己的功能相同.它是在C++ 11中引入的,并且在最新版本的gcc中可用,如果你启用c ++ 0x扩展,至少早在4.5.
不仅itoa
缺少gcc,它还不是最方便的功能,因为你需要给它一个缓冲区.我需要一些可以在表达式中使用的东西,所以我想出了这个:std::string itos(int n) { const int max_size = std::numeric_limits::digits10 + 1 /*sign*/ + 1 /*0-terminator*/; char buffer[max_size] = {0}; sprintf(buffer, "%d", n); return std::string(buffer); } 通常情况下使用它会更安全
snprintf
,sprintf
但缓冲区的尺寸要小心,以免受到膨胀的影响.查看示例:http://ideone.com/mKmZVE
问题似乎是关于C,它没有'std ::`等东西.
5> 小智..:正如Matt J所写,有
itoa
,但它不是标准的.如果您使用,您的代码将更加便携snprintf
.