将int转换为char *

时间:2010-04-15 02:27:21

标签: c++ c

这是一个非常基本的问题,我知道一种方法是执行以下操作:

char buffer[33];
itoa(aq_width, buffer,10);

其中aq_width是int,但是我不能保证为了做到这一点我需要多大的缓冲区...我总是可以分配一个非常大的缓冲区大小,但这不会很好。 ..任何其他漂亮而简单的方法吗?

4 个答案:

答案 0 :(得分:4)

std::stringstream ss;
ss << 3;
std::string s = ss.str();
assert(!strcmp("3", s.c_str()));

答案 1 :(得分:2)

您可以使用此宏(对于签名类型)计算缓冲区所需大小的上限:

#define MAX_SIZE(type) ((CHAR_BIT * sizeof(type) - 1) / 3 + 2)

顺便说一下,itoa()不是标准C,并不是随处可用。 snprintf()将完成这项工作:

char buffer[MAX_SIZE(aq_width)];
snprintf(buffer, sizeof buffer, "%d", aq_width);

答案 2 :(得分:0)

来自glibc的一个很好的函数是asprintf,像

一样使用
char * buffer = NULL;
int buffer_size = asprintf(&buffer,"%d",aq_width);
assert(buffer_size >= 0);
...
free(buffer)

将为您分配缓冲区。

您可以更方便地使用snprintf,这将返回您需要分配的字符数。

答案 3 :(得分:0)

有更多内存有效的方法,但它们并不“简单”。

考虑100字节内存的成本,比如一秒钟。一年十亿的千兆字节成本,10美元?我们在这里谈论纳米抗体。

使缓冲区太大。请注意,32位int的十进制数不能超过10位,而64位的int不能超过20位。