我想将字符串“ hello world”转换为某个整数值,然后从转换后的整数值取回“ hello world”字符串。我尝试过,但是在将int转换为字符串时遇到问题。
我使用以下代码将字符串转换为整数:
char str[50];
int i, len; int result=0;
printf("Enter string to be converted: ");
gets(str);
len = strlen(str);
for(i=0; i<len; i++){
result = result * 10 + ( str[i] - '0' );
}
printf("%d\n", result);
然后我尝试像这样将其转换回去:
printf("%d\n", result);
int rem; int j = 0;
char result_str[50];
while (result !=0) {
result = result - '0' ;
rem = result%10 ;
result = result/10;
result_str[j] = 'a' + (rem -1);
printf("%c",result_str[j]); j++;
}
printf("result string = %s",result_str);
示例输出:
$ ./a.out
Enter string to be converted: hello
619663
619663
eccfhresult string = eccfh
当我尝试使用字符串“ hello world”时,出现了分段错误。
答案 0 :(得分:1)
绝对没有办法将字符串转换为int然后再以所需的方式返回。
int
通常是4个字节,而您使用的char[50]
是50个字节。这意味着int
可以有2³²个不同的值,而char[50]
可以有2⁴⁰⁰个不同的值。因此,将它们一对一映射是根本不可能的。
让我们以代码和计算机领域之外的示例为例,仅关注数字。您能想象一种将两位数字转换为一位数字然后转换回来的方法吗?如果可能的话,那么我们就不需要两位数字了。如果存在这种方法,那么您将能够在单个位中存储无限量的数据。
您可以将char[4]
转换为int
并返回。这实际上非常容易。此代码将显示abcd
。
char str[4] = { 'a', 'b', 'c', 'd'};
// Convert to int
int result = *(int*) str;
char newstr[4];
// Convert back
char * ptr = (char*) &result;
for(int i=0; i<4; i++)
newstr[i] = ptr[i];
printf("%.4s\n", newstr);
请注意,我完全忽略了字符串的终止,只是指示printf
在四个字符之后停止。
哦,千万不要使用gets
函数。很危险。