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

文字列全体をatoiに渡しています:

"3255859300350" // First loop iteration
"255859300350"  // Second loop iteration
"55859300350"
"5859300350"
// And so on...

1 つの解決策は、ループ内で一時バッファーを使用することです。

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 に答える
1

以下のステートメントの代わりに

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

このステートメントを使用してください

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

具体的には、上記のように使用できます。これにより、ASCII桁が整数桁に変換されます。

  Example '3' to 3. 
于 2013-09-30T11:05:55.463 に答える
0

atoia を取り、char*それを整数に変換します。ただし、整数は で表すことができる最大値よりも大きくなっていますint。これにより、未定義の動作が発生します(あなたの場合atoi、最初の 0x7fffffff を返しますint

于 2013-09-30T11:03:01.623 に答える