0

だから私はこれにかなりイライラしており、私が間違っていることを正確に理解する唯一の方法は、あなたの素晴らしい人々に尋ねることだと感じています. 文字列 (数値を含む) を 16 進数に変換しようとしています。これが私のコードです(注、10-15から文字へのスイッチをまだ配置していません。これを実行したときに整数値が返されることを確認したかっただけです...運が悪い):

void toHex(char *inString){
    char *charVal = inString;
    char decVal[100];

    for(int i = 0; decVal[i] != '\0'; i++){
        decVal[i] = *charVal;
        charVal++;
    }

    char storeMod[100];
    int i = 0;
    int testVal = atoi(decVal);

    for(i; testVal >= 16; i++){
        int a = testVal;
        testVal = testVal/16;
        storeMod[i] = a;
    }

   int a = 0;
   char hexval[100];
   hexVal[0] = '0';
   hexVal[1] = 'x';
   for(int j = i+2; j>=2; j--){
       hexVal[j] = storeMod[a];
       a++;
   }

   printf("%s hex valu\n", hexVal);
   return;
}

たとえば、300 を入力すると、@ が返されます。

私も試しました:

char hexVal[100];
sprintf(hexVal,"%x",*inString);
strcpy(instring,hexVal);

これは 300 に対して 3fa844e0 の 16 進値を返しますが、これも明らかに間違っています。助けていただければ幸いです。8進数でもこれを行う必要があるため、この概念を理解し、何が間違っているのかを確認する必要があります。

4

2 に答える 2

4

それ以外の:

sprintf(hexVal,"%x",*inString);

使用する:

sprintf(hexVal, "%x", atoi(inString));
于 2012-04-10T02:58:38.430 に答える
0

指摘されているように、関数全体を次のように置き換えることができます。

printf("%lx\n", strtol(inString, NULL, 10));

しかし、これが学校や個人的な満足のためである場合、あなたは2つの主要なステップを知っているようです.

  • 文字列を整数に変換します
  • 整数を右基数の文字列にエンコードします。

ステップ 1 では、実行中の結果に 10 を掛けて、現在の数字を足して、左から右に数値をステップスルーします (これは文字列では簡単です)。

ステップ 2 では、一度に 4 ビット (1 桁の 16 進数) を実行し、そのプラスを挿入し'0'ます。LSB から開始した場合は、文字列を逆にすることを忘れないでください。

于 2012-04-10T03:35:45.993 に答える