Преобразование шестнадцатеричной строки в int - PullRequest
0 голосов
/ 22 июня 2019

Напишите функцию C, которая принимает строку с нулевым символом в конце, содержащую шестнадцатеричную строку, и возвращает целочисленное значение.Вы не можете вызвать любую функцию библиотеки C, кроме strlen (), чтобы закодировать функцию.Десятичная строка будет содержать только 0-4 символов ASCII от «0» до «9» и от «A» до «F».Обработка ошибок не требуется.Если строка пуста, верните значение 0.

Я постоянно пытался исправить свои ошибки, но как только я их исправляю, появляются новые ошибки, что приводит меня в замешательство.

#include <stdlib.h>  /*used for EXIT_SUCCESS */
#include <stdio.h>   /*used for printf */
#include <string.h>  /* used for strlen */
#include <stdbool.h> /* used for bool */
#include <math.h>


unsigned int hexStringTouint(const char str[], int length, int n[])
{
    int i, j;
    int intvalue = 0;
    int digit;
    for(i = (length-1), j = 0; i --, j++)
    {
        if(n[i]>='0' && n[i] <='9')
        {
            digit = n[i] - 0x30;
        }
        else if(n[i]>= 'A' && n[i] <= 'F')
        {
            switch(n[i])
            {
                case 'A': digit = 10; break;
                case 'B': digit = 11; break;
                case 'C': digit = 12; break;
                case 'D': digit = 13; break;
                case 'E': digit = 14; break;
                case 'F': digit = 15; break;
            }
        }
        intvalue += digit*pow(16,j);
    }
    printf("int value is %d\n", intvalue);
    return 0;
}

int main(void)
{
    int i, length, intvalue;
    unsigned char n[] = "";
    printf("Enter your hexadecimal string: ");
    scanf("%c\n", n);
    intvalue = 0;
    length = strlen(n);
    return EXIT_SUCCESS;
}

Я получаю сообщения об ошибках, говорящие expected ';' in 'for' statement specifier и как const char * преобразует между указателями и целыми числами.

1 Ответ

1 голос
/ 22 июня 2019

Большая часть кода OP - верный путь, но существуют различные ошибки кодирования.

Добавить условие теста

// for(i = (length-1), j = 0; i --, j++)
//                         v 
for(i = (length-1), j = 0; i >= 0; i --, j++)

не может вызвать любую библиотеку Cфункция, кроме strlen ()

// intvalue += digit*pow(16,j);
intvalue += digit*(1u << (4*j));

Возвращает значение

Требование "... и возвращает целое значение"

//int intvalue = 0;
//...
//printf("int value is %d\n", intvalue);
//return 0;

unsigned intvalue = 0;
...
printf("integer value is %u\n", intvalue);
return intvalue;

Слишком маленький буфер

// unsigned char n[] = "";
// scanf("%c\n", n);

char n[100] = "";
scanf("%99s", n);

hexStringTouint ()

Функция не вызывается в main().

Существуют другие проблемы


A проще подход

unsigned hexStringTouint2(const char *str) {
  unsigned value = 0;
  while (*str) {
    unsigned digit = hexCharTouint(*str);  // tbd code
    value = value*16 + digit;
    str++;
  }
  return value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...