Преобразование из Hex в Dec C / C ++ - PullRequest
0 голосов
/ 08 июня 2018

У меня проблема с конвертацией.Моя программа может конвертировать из dec в hex, но не может конвертировать из hex в dec.Пожалуйста, помогите мне.

int main () {

string liczba;
while(cin>> liczba){
    int number = atoi(liczba.c_str());
if(number==-1){
    break;
}
else{
if(liczba[0]==0 && liczba[1]=='x'){
    printf("%d\n", number);
}
else{
    printf("0x%X\n", number);
}
}}

return 0;}

1 Ответ

0 голосов
/ 09 июня 2018

Если входная строка начинается с «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);
...