Давайте посмотрим.
unsigned int hextoint(const char temp[])
{
int i;
int answer = 0;
char hexchar[] = "aAbBcCdDeEfF" ;
for ( i=0; temp[i] != '\0'; i++ )
{
printf("In here");
printf("%c\t",temp[i] );
}
return answer;
}
Кажется, что это даже не попытка сделать какое-либо преобразование. Он всегда должен возвращать 0, поскольку answer
никогда не назначается никакое другое значение. Обычно вы делаете что-то вроде:
for (i=0; input[i] != '\0'; i++) {
answer *= 16;
answer += digit_value(input[i]);
}
return answer;
Где digit_value
(достаточно очевидно) возвращает значение отдельной цифры. Один из способов сделать это:
int digit_value(char input) {
input = tolower(input);
if (input >= '0' && input <= '9')
return input - '0';
if (input >= 'a' && input <= 'f')
return input - 'a' + 10;
return -1; // signal error.
}
Затем, глядя на main
:
main()
{
В зависимости от правила «implicit int» обычно плохая практика, по крайней мере, IMO. Намного лучше указать тип возвращаемого значения.
// Calculate the number of char's.
int numberOfChars;
numberOfChars = sizeof test /sizeof test[0];
Это фактически вычисляет количество строк, а не число char
с.
for ( i = 0; i<=numberOfChars;i++)
Допустимые подписки выполняются от 0 до количества элементов - 1, поэтому при этом выполняется попытка чтения за концом массива (с неопределенным поведением).