C-code zu konvertieren hex zu int

Schreibe ich diesen code umwandeln eines hex-Eintrag in die Ganzzahl entspricht. So Eine würde 10 und B 11 etc. Dieser code wirkt sonderbar, dass es den seg. Störungen an beliebigen stellen und darunter eine extra newline character mal wird es bekommen, um zu arbeiten. Ich versuche zu Debuggen, nur damit ich verstehen kann, was mache ich hier falsch. Kann jemand ein Blick werfen und mir hier helfen ? Vielen Dank für Ihre Zeit.

/* Feste funktionierenden code für alle interessierten */

         #include <stdio.h>
            #include <stdlib.h>


            unsigned int hextoint(const char temp[])
            {

            int i;
            int answer = 0;
            int dec;
            char hexchar[] = "aAbBcCdDeEfF" ;


            for ( i=0; temp[i] != '\0'; i++ )
            {

                if ( temp[i] == '\0')
                {

                    return ;        
                }

                if (temp[i] == '0' || temp[i] == 'x' || temp[i] == 'X' )
                {       
                    printf("0");
                    answer = temp[i];
                }

                //compare each temp[i] with all contents in hexchar[]
                int j;
                int a = temp[i];
                for ( j=0; hexchar[j] != '\0'; j++)
                {
                    if ( temp[i] == hexchar[j] )
                    {
                    answer *= 16;
                    answer = answer + 10 + (j/2);
  //                   printf("%d\n",answer );
                    break;      
                    }
                }

            }

            return answer;  

            }


            main()
            {
            char *test[] = 
            {   "bad",
                "aabbdd"
                "0100",
                "0x1",
                "0XA",
                "0X0C0BE",
                "abcdef",
                "123456",
                "0x123456",
                "deadbeef", 
                "zog_c"
            };

            int answer=0;

            //Calculate the number of char's.
            int numberOfChars;
            numberOfChars = sizeof test /sizeof test[0];

            printf("main():Number of chars = %d\n",numberOfChars);
            int i;
            //Go through each character and convert Hex to Integers.
            for ( i = 0; i<numberOfChars;i++)
            {
                //Need to take the first char and then go through it and convert            
                                        it.
                answer = hextoint(test[i]);
                printf("%d\n",answer ); 
            }


            }
  • Haben Sie versucht, Durchlaufen Sie eine Zeile zu einem Zeitpunkt mit einem debugger, um zu sehen, wo das Verhalten abweicht von dem, was Sie beabsichtigten?
  • Wenn dies eine Funktion, die Sie brauchen für etwas anderes (eher als nur eine übung in schreiben eines hex zu int converter), werfen Sie einen Blick auf die strtol - Funktion in der standard-Bibliothek.
  • sizeof(test) und sizeof(test[0]) haben die gleiche Größe. Sie sind beide Zeiger
  • Oli, ich habe. Und gdb sagt, dass es stürzt bei for ( i=0; temp[i] != '\0'; i++ ) als auch der Arbeitsspeicher ist out of bounds. Aber ich finde das Verhalten komisch, und bin nicht in der Lage, um herauszufinden, warum das mem. ist out of bounds.
  • Phil, ich bin versucht zu Debuggen, um besser zu verstehen, C und sehen, wohin ich gehe falsch. Ich don ' T wollen, verwenden Sie die standard-Bibliotheken. Dank
  • Sind Sie sicher, dass das char-array ist null-terminiert?
  • Was bedeutet numberOfChars enthalten nach der Ausführung der Zuweisung?
  • Ich würde vorschlagen, zu erforschen, was der Wert von i ist, wenn es abstürzt und wie man diese vergleicht, wie lange Sie denken, dass die Zeichenfolge sein sollte. Und dann arbeiten Sie heraus, warum, zum Beispiel, der string ist nicht mehr null-terminiert ist (wenn das wird das Problem sein).

InformationsquelleAutor ZionKing | 2011-02-09
Schreibe einen Kommentar