0

我正在尝试将一个 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

我做错了什么,我该如何解决?

4

4 回答 4

1

而不是下面的声明

   hashStringInput[i] = atoi(&hashString[i]);

使用此语句

   hashStringInput[i] =hashString[i]-'0';

具体来说,在您的情况下,您可以如上所述使用,这会将 ascii 数字转换为整数数字。

  Example '3' to 3. 
于 2013-09-30T11:05:55.463 回答
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 字符一起使用。

于 2013-09-30T11:02:43.867 回答
0

您的代码毫无意义。该atoi函数将字符串转换为整数。那么你为什么要传递单个字符呢?

更新:你没有一个大整数。你有一串数字。数字代表一个从 0 到 9 的数字,这个数字一点也不大。如果你确实有一个大整数,你永远不会调用atoi,因为它会将字符串转换为整数。

您的代码sprintf(hashString,"%d%d%d",premaster1,300,350);从三个整数创建一串十进制数字。那就是,我假设,为什么你称它为 hash String。它不是一个大整数。不要将数字与其文本表示混淆。程序员必须保持这些东西直截了当,否则会导致痛苦。一半的解决方案是理解问题。

于 2013-09-30T10:53:50.507 回答
0

atoi接受 achar*并将其转换为整数。但是,您的整数大于可以由 a 表示的最大值int。这会导致未定义的行为(在您的情况下atoi,第一个返回 0x7fffffff int

于 2013-09-30T11:03:01.623 回答