繁体   English   中英

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

[英]How to convert int to char/string and vice versa in linux(gcc)?

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

我已经使用了 sprintf(&charvar,"%d",&intvar) 但它产生了错误的 output,可能是垃圾。

我还听说 gcc 中的 atoi() 有错误。参考: GCC atoi bug

将字符串/字符转换回 int 的另一种方法是什么?

实际上,我想使用 SOCK_STREAM 将 integer 从一台机器发送到另一台机器。

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

删除intvar之前的 & 符号:

sprintf(&charvar,"%d",intvar)

两个注意事项:

  • 在这里,我假设&charvar是正确的类型,但它可能不是。
  • 尽管在这里可能没有太大区别,但养成使用snprintf而不是sprintf的习惯是一件好事。

这是一些示例代码:

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

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

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

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

例子:

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

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

你的 sprintf 是错误的。你应该写 sprintf(string,"%d",integer); 如果您想通过网络发送 integer 并且这就是为什么要将其转换为字符串的原因,请查看htons

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

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

如果您希望您的字符串具有 int 的值,那么您应该使用 sprintf。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM