如何在linux(gcc)中将int转换为char / string,反之亦然?

时间:2011-07-19 11:13:19

标签: c sockets gcc printf

我想知道将整数转换为char / string的方法,反之亦然。

我已经使用过sprintf(& charvar,“%d”和& intvar),但它会产生错误的输出,可能是垃圾。

我也听说过gcc中的atoi()有bug。参考:GCC atoi bug

将string / char转换回int的另一种方法是什么?

实际上我想使用SOCK_STREAM从一台机器发送一个整数。

//编辑:我忘了告诉sprintf()进行转换并返回正值。

5 个答案:

答案 0 :(得分:1)

intvar

之前删除&符号
sprintf(&charvar,"%d",intvar)

两个注释:

  • 在这里,我假设&charvar的类型正确,可能不是。
  • 虽然这里可能没什么区别,但养成使用snprintf而不是sprintf的习惯是一件好事。

以下是一些示例代码:

int intvar = ...;
char str[16];
snprintf(str, sizeof(str), "%d", intvar);

答案 1 :(得分:1)

如果要将整数发送到另一台机器,您可以将其作为二进制数据发送,只需将intvar直接发送到流,您就不必先将其转换为char。这只会在知道数据长度时引入问题,因为不同的值会产生不同长度的字符串。

答案 2 :(得分:1)

请阅读'sprintf'和'sscanf'的手册,也许他们更安全的版本适合您。

答案 3 :(得分:0)

你不能sprintf变量。你需要一个缓冲区,因为可能有几个数字和尾随零。而且,参数应该是int变量,而不是它的地址。

示例:

char buffer[256];
int i = 42;
sprintf(buffer, "%d", i);

(缓冲区将填充'4','2'并尾随'\ 0')。

答案 4 :(得分:0)

你的sprintf是错的。你应该写sprintf(字符串,“%d”,整数); 如果你想通过网络发送一个整数,那就是你想把它转换成字符串的原因,看看htons

使用这些函数,您可以将整数转换为网络格式,并避免不同的字节序问题! 如果您只想将其转换为字节,可以执行以下操作:

char buf[4];
memcpy(buf,&integer,4);

如果你想让你的字符串具有int的值,那么你应该使用sprintf。