• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana napisu hex, oct na liczbę dec - C

Object Storage Arubacloud
0 głosów
3,040 wizyt
pytanie zadane 9 marca 2017 w C i C++ przez olsześ Gaduła (3,080 p.)

Dzień dobry, 

potrzebuję zamienić napis w systemie hex/oct na liczbę w systemie dec, lecz nie mam pomysłu jak rozwiązać mój problem.

Próbowałem za pomocą atoi zamienić napis na cyfrę, ale np. dla '0x43' funkcja atoi konwertuje na '0'. 
 

Wczytuje ciąg znaków dlatego, że nie wiem w jakim systemie użytkownik poda liczbę, a wczytując ciąg znaków mogę łatwo to sprawdzić w taki sposób: 

/*wyswietlanie k-tego najmniejszego elementu */
int main()
{
    char napis[100]; /*jest to tablica wprowadzonych liczb przed konwertowaniem  */
    int liczba;
    unsigned i=0, j=0, k, n; /* n - ile liczb bedzie podancyh, k - k-ta liczba najmniejsza do wyswietlenia */
    printf("Podaj ile elementow bedziesz wprowadzal:\n");
    scanf("%d",&n);
    int tablica[n]; /*tworzenie tablicy ktora bedzie miala same cyfry dec */
    printf("Podaj k:\n");
    scanf("%d", &k);

    /*wczytywanie do stringa */
    for(;i<n; i++)
    {
        scanf("%s",napis);
        if(napis[0]=='0')
        {
            if(napis[1]=='x')
            {
                printf("szesnastkowy\n");

            }
         else
         {
            printf("osemkowy\n");
            liczba = atoi(napis); /*zle zamienia */
            printf("%d", liczba);
         }
        }
        if(napis[0]!='0')
        {
            printf("dziesietny\n");
            liczba = atoi(napis);
            tablica[i] = liczba;
        }

    }
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 9 marca 2017 przez tangarr Mędrzec (154,860 p.)
wybrane 9 marca 2017 przez olsześ
komentarz 9 marca 2017 przez olsześ Gaduła (3,080 p.)
to jest wyświetlanie cyfr w danym typie, a ja potrzebuję zamienić ciąg znaków na int, a potem dopiero konwertować (a nie wypisywać) na dec
komentarz 9 marca 2017 przez tangarr Mędrzec (154,860 p.)

wystarczyłoby przeczytać ten przykład i się nad nim zastanowić.

scanf(" %d %x %o", &i , &j, &k );

%d - decimal
%x - hexadecimal
%o - octal

jeżeli chcesz wczytać dane z napisu używasz sscanf, np:

const char* napis = "0xff";
int liczba;
sscanf(napis+2, "%x", &liczba)


 

komentarz 9 marca 2017 przez olsześ Gaduła (3,080 p.)
Czytałem przykład ;)
Nie miałem pojęcia o sscanf, dopiero zaczynam naukę C.
Dzięki ;)

Podobne pytania

+2 głosów
3 odpowiedzi 116 wizyt
pytanie zadane 24 sierpnia 2023 w C# przez Mati336 Użytkownik (560 p.)
0 głosów
1 odpowiedź 2,079 wizyt
0 głosów
1 odpowiedź 1,563 wizyt
pytanie zadane 28 października 2018 w C i C++ przez jjanickij Użytkownik (510 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...