我想知道将整数转换为char / string的方法,反之亦然。
我已经使用过sprintf(& charvar,“%d”和& intvar),但它会产生错误的输出,可能是垃圾。
我也听说过gcc中的atoi()有bug。参考:GCC atoi bug
将string / char转换回int的另一种方法是什么?
实际上我想使用SOCK_STREAM从一台机器发送一个整数。
//编辑:我忘了告诉sprintf()进行转换并返回正值。
答案 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。