Преобразование числа ASCII в число Hex в C без использования библиотечных функций - PullRequest
0 голосов
/ 04 июня 2011

Я хочу преобразовать 32-разрядное число ASCII (например, «FE257469») в эквивалентное 32-разрядное шестнадцатеричное число, которое будет сохранено в 32-разрядной переменной. Самое главное, я хочу сделать это без , используя любую библиотечную функцию, такую ​​как sscanf (), atoi () и т. Д.

Есть идеи на этот счет?

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Вот реализация такой функции на основе переключателя:

unsigned int parseHex( char *str )
{
    unsigned int value = 0;

    for(;; ++str ) switch( *str )
    {
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
            value = value << 4 | *str & 0xf;
            break;
        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
        case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
            value = value << 4 | 9 + *str & 0xf;
            break;
        default:
            return value;
    }
}
1 голос
/ 04 июня 2011

Обычный способ это что-то вроде:

инициализировать результат до 0

  1. преобразовать одну цифру ввода в десятичную, чтобы получить текущую цифру
  2. умножить результат на 16
  3. добавить текущую цифру к результату
  4. повторите шаги 1-3 для оставшихся цифр
...