这可能不是一个最佳或快速的解决方案,但没有人提到它,它是一个简单的解决方案,可能很有用。
您可以使用sprintf() 和strtol()。
char str[100];
int i=32, j=45;
sprintf(str, "%d%d", i, j);
int result=strtol(str, NULL, 10);
您首先使用sprintf() 将数字写入一个字符串,然后将另一个数字写入另一个字符串(就像您使用printf() 打印到标准输出一样),然后使用strtol() 将生成的字符串转换为数字。
strtol() 返回一个long,它的值可能大于int 中可以存储的值,因此您可能需要先检查结果值。
int result;
long rv=strtol(str, NULL, 10);
if(rv>INT_MAX || rv<INT_MIN || errno==ERANGE)
{
perror("Something went wrong.");
}
else
{
result=rv;
}
如果strtol() 返回的值不在int 的范围内(即不在(包括)INT_MIN 和INT_MAX 之间),则发生错误。 INT_MIN 和 INT_MAX 来自 limits.h。
如果字符串中的值太大而无法在long 中表示,由于溢出,errno 将被设置为ERANGE(来自errno.h)。
了解strtol() here。
编辑:
正如chqrlie 的启发性评论所指出的,负数会导致这种方法出现问题。
你可以使用这个或修改这个来解决这个问题
char str[100], temp[50];
int i=-32, j=45, result;
sprintf(temp, "%+d", j);
sprintf(str, "%d%s", i, temp+1);
long rv=strtol(str, NULL, 10);
首先将第二个数字连同其符号一起打印到字符数组temp。
%+d 中的+ 将导致打印数字的符号。
现在将第一个数字和第二个数字打印到str,但没有第二个数字的符号部分。我们通过忽略temp 中的第一个字符来跳过第二个数字的符号部分。
strtol() 终于完成了。