С++ шестнадцатеричных в десятичные конвертер
Приветствия,
В настоящее время я столкнулся с проблемой, которую, похоже, не понимаю даже во время отладки. Я пытаюсь создать программу преобразования шестнадцатеричных чисел в десятичные, но столкнулся с проблемой, которую не могу исправить. Каждый раз, когда я пытаюсь ввести 8Fs или выше для преобразования в десятичную дробь, это приводит к результату 16Fs (он же максимальный диапазон:18446744.... 615)
Это и есть код:
#include <iostream> #include <sstream> #include <string> using namespace std; int powerFunc(int x, int y) { unsigned long long int result = 1; int i; for (i = 0; i < y; i++) { result *= x; } return result; } int hexToDec(string hexaNumber) { int i; int power = hexaNumber.length() - 1; int checkLength = hexaNumber.length(); unsigned long long int decimalResult = 0; //Convert Hexa to Decimal for Number; for (i = 0; i < checkLength; i++) { if (int(hexaNumber[i]) >= '0' && int(hexaNumber[i]) <= '9') { // check if FirstHexaNumber 0 to 9 decimalResult += ((int(hexaNumber[i])) - 48) * powerFunc(16, power); //formula to convert hexadecimal into decimal, int(FirstHexaNumber[i]) is used to convert hexa into a number } else if (int(hexaNumber[i]) >= 'A' && int(hexaNumber[i]) <= 'F') // check if FirstHexaNumber is A to F { decimalResult += ((int(hexaNumber[i])) - 55)*powerFunc(16, power); } else if (int(hexaNumber[i]) >= 'a' && int(hexaNumber[i]) <= 'f') // check if FirstHexaNumber is a to f { decimalResult += ((int(hexaNumber[i])) - 87)*powerFunc(16, power); } power--; //power-- since it starts from "HexaNumber.length - 1". Power should decrease as assignment of power goes down } return decimalResult; } int main() { unsigned long long int result; unsigned long long int dec1; unsigned long long int dec2; unsigned long long int totalDec; string hexa1; string FirstHexaNumber; getline(cin, FirstHexaNumber); dec1 = hexToDec(FirstHexaNumber); cout << dec1 << endl; return 0; }
Что я уже пробовал:
Я попытался отладить эту проблему, функция питания работает нормально, ей удается получить тот результат, который она должна получить. В этом случае, когда я ввожу "FFFFFFFF", мощность, которую я получаю, равна 268435456, что правильно.
Однако, когда дело доходит до преобразования части, она портится. По какой - то причине при первом запуске цикла for для Формулы (int(F) - 55) * 16^8 = она дает 18446744.... 615. Что я могу сделать, чтобы решить эту проблему? Заранее спасибо.