将字符串转换为整数,并从c中的整数值获取相同的字符串

时间:2018-11-13 06:17:36

标签: c

我想将字符串“ 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”时,出现了分段错误。

1 个答案:

答案 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函数。很危险。