Convert Hex to Dec

0

Witam, mogłby mi ktoś wytłumaczyć dlaczego przypadek z default'em nie działa poprawnie ? (Mnożenie char'a przez liczbe nie działa poprawnie)

int HexToDec(int size,char c[])
{
    int sum=0,x,counter=1;
    for(x=size-1;x>=0;x--)
    {
      switch(c[x])
      {
      case 'a':
      case 'A':
          {
            c[x]=10;
            sum=sum+(c[x]*counter);
            break;
          }
      case 'b':
      case 'B':
          {
            c[x]=11;
            sum=sum+(c[x]*counter);
            break;

          }
     case 'c':
     case 'C':
          {
            c[x]=12;
            sum=sum+(c[x]*counter);
            break;
          }
      case 'd':
      case 'D':
          {
            c[x]=13;
            sum=sum+(c[x]*counter);
            break;
          }
      case 'e':
      case 'E':
          {
            c[x]=14;
            sum=sum+(c[x]*counter);
            break;
          }
      case 'f':
      case 'F':
          {
            c[x]=15;
            sum=sum+(c[x]*counter);
            break;
          }
      default:
            {
            sum=sum+(c[x]*counter);
            break;
            }
      }//switch
      counter=counter*16;
    }//for
    return sum;
}
2

Cała odpowiedź znajduję się tutaj -> Tablica ASCII.
Chodzi o to że znaki cyfr mają tak na prawdę inne wartości niż cyfry które reprezentują. Dla przykładu znak 0 ma wartość 48.

Musiałbyś przekonwertować na cyfrę np tak:

// w case - default
c[x] = c[x] - '0';

Dodam jeszcze że klamry w case'ach są zbędne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1