У меня есть встроенная система с C-кодом, которая работает довольно просто; он считывает символы через последовательное соединение, интерпретирует полученные символы как шестнадцатеричные числа и в зависимости от того, что было получено, продолжает делать что-то еще. Однако есть один особый случай, когда полученные символы являются десятичными, а не шестнадцатеричными. Поскольку этот случай очень редок (вид ошибки в случае ошибки), я не хочу изменять фактическое получение символа, чтобы решить, следует ли интерпретировать полученное значение как десятичное или шестнадцатеричное, а скорее добавить быстрый алгоритм в обработка случая, когда я меняю число на десятичное.
Как бы вы сказали, что это самый быстрый (как наиболее эффективный с точки зрения процессора) способ сделать это? Поскольку программное обеспечение работает на небольшом микроконтроллере, любые функции библиотеки C не подходят, поскольку я не хочу добавлять больше ненужных #include, поэтому я ищу чисто математический алгоритм.
Просто для ясности, я не спрашиваю самый быстрый способ сделать базовое преобразование шестнадцатеричного в десятичное, как в 0x45 -> dec 69, но то, что я хочу сделать, это преобразовать, например. 0x120 в десятичное число 120.
Заранее спасибо!
РЕДАКТИРОВАТЬ: Извините, я постараюсь объяснить более подробно. Фактический код слишком длинный, и я думаю, что вставлять его сюда не нужно. Итак, вот что происходит:
Сначала я читаю полученное число из последовательной линии, скажем, "25". Затем я превращаю его в шестнадцатеричное число, поэтому у меня есть переменная со значением чтения, скажем, X = 0x25. Это уже работает нормально, и я не хочу вносить в это изменения. Что я хотел бы сделать сейчас в этом особом случае, так это просто изменить интерпретацию переменной так, чтобы вместо X == 0x25, X == 25. Шестнадцатеричное 0x25 превращается в десятичное 25. Должна ли быть какая-то математическая формула для такого изменения, без каких-либо инструкций для конкретного процессора или библиотечных функций?
0x120
, то просто создайте указатель на символ следующим образом:char *decimal = &inChar[2];
иint number = atoi(decimal);
... хотя я подозреваю, что то, что вы ищете, немного сложнее. Вы действительно должны уточнить это (покажите код, будьте более конкретными) - person Elias Van Ootegem   schedule 15.04.2014