Ваш код работает в неправильном направлении. Строка "2ef" анализируется справа налево. Но значение ptr находится в значении '\ 0' при окончании строки и никогда не проходит через цикл while. Также ptr должен быть уменьшен, а базовый увеличен. Я установил для базы значение 0 при обработке цифры 1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int convertHexToDec(char *string);
/* Runs the main program and asks for user input */
int main(int argc, char* argv[]) {
char* programName;
programName = argv[0];
/* Prints an error if user's input is less than 1 argument. */
if(argc <= 1) {
printf("Error: Not enough arguments.\n");
}
if (argc >= 2) {
int i;
for (i = 1; i <= argc - 1; ++i) {
printf("%s = %d\n", argv[i], convertHexToDec(argv[i]));
}
}
return 0;
}
int convertHexToDec(char* string) {
char *ptr;
ptr = string;
int decimalNum = 0, base = 0, replaceInt = 0;
while (*ptr != '\0') {
ptr++;
}
ptr--;
while (*ptr != '\0') {
switch (*ptr) {
case '0':
replaceInt = 0;
break;
case '1':
replaceInt = 1;
break;
case '2':
replaceInt = 2;
break;
case '3':
replaceInt = 3;
break;
case '4':
replaceInt = 4;
break;
case '5':
replaceInt = 5;
break;
case '6':
replaceInt = 6;
break;
case '7':
replaceInt = 7;
break;
case '8':
replaceInt = 8;
break;
case '9':
replaceInt = 9;
break;
case 'a':
replaceInt = 10;
break;
case 'b':
replaceInt = 11;
break;
case 'c':
replaceInt = 12;
break;
case 'd':
replaceInt = 13;
break;
case 'e':
replaceInt = 14;
break;
case 'f':
replaceInt = 15;
break;
default:
printf("Wrong input");
exit(0);
}
decimalNum += pow(16, base) * replaceInt;
ptr--;
base++;
}
return decimalNum;
}