[英]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.