Если входная строка начинается с «0x», то atoi()
всегда будет возвращать 0, потому что прекратит проверку строки, когда увидит нецифровый символ (в данном случае «x»).Поэтому number
всегда будет 0 для шестнадцатеричного ввода.
Самое простое решение - использовать strtol()
вместо atoi()
.strtol()
, вызываемый с аргументом base
, равным 0, распознает префикс "0x" и затем обрабатывает следующие символы как шестнадцатеричные цифры, а это то, что нужно вашей программе.Это будет выглядеть так:
number = strtol(liczba.c_str(), NULL, 0);
Если ваша платформа не имеет strtol()
, то следующим самым простым решением будет использовать sscanf()
, который также понимает префикс "0x":
sscanf(liczba.c_str(), "%i", &number);