我正在尝试将int字符串转换为int数组。
这是我的代码:
int premaster1 = 3255859;
char hashString[100];
int hashStringInput[1000];
sprintf(hashString,"%d%d%d",premaster1,300,350);
printf("\n message going inside hash function = %s\n",hashString);
for(i=0;i<strlen(hashString)+1;i++){
hashStringInput[i] = atoi(&hashString[i]);
printf("%d",hashStringInput[i]);
}
这是我的输出:
message going inside hash function = 3255859300350
274089982-18387374102472550215643330548593003505930035093003503003503503503505000
这显然是错误的。我的愿望输出应该是:
message going inside hash function = 3255859300350
3255859300350
我做错了什么以及如何解决?
答案 0 :(得分:1)
您正在将整个字符串传递给atoi:
"3255859300350" // First loop iteration
"255859300350" // Second loop iteration
"55859300350"
"5859300350"
// And so on...
一种解决方案是在循环中使用临时缓冲区:
char temp [2] = { 0, 0 }; // Second element is for NUL character
temp[0] = hashString[i]; // Copy first char
hashStringInput[i] = atoi(temp);
此外,请勿将+1
与strlen
一起使用,否则您不想转换NUL字符。
答案 1 :(得分:1)
而不是下面的陈述
hashStringInput[i] = atoi(&hashString[i]);
使用此声明
hashStringInput[i] =hashString[i]-'0';
具体在您的情况下,您可以使用如上所述,这将ascii数字转换为整数位。
Example '3' to 3.
答案 2 :(得分:0)
你的代码没有任何意义。 atoi
函数将字符串转换为整数。那你为什么要传递个性?
更新:您没有大整数。你有一串数字。数字表示从0到9(包括0和9)的数字,这个数字根本不大。如果你确实有一个大整数,你将永远不会调用atoi
,因为它会将字符串转换为整数。
您的代码sprintf(hashString,"%d%d%d",premaster1,300,350);
从三个整数创建一个十进制数字字符串。那就是,我假设,为什么你称之为hash String 。它不是一个大整数。不要将数字与其文本表示混淆。程序员必须保持这些事情,否则会产生痛苦。解决方案的一半是理解问题。
答案 3 :(得分:0)
atoi
获取char*
并将其转换为整数。但是,您的整数大于int
可表示的最大值。这会导致未定义的行为(在您的情况下atoi
为第一个int
返回0x7fffffff)