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

Zamiana cyfr na znaki

VPS Starter Arubacloud
0 głosów
1,020 wizyt
pytanie zadane 18 listopada 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

Mam problem dotyczący zamiany liczby na system szesnastkowy, otóz chcę aby program wyswietlal kolejne liczby od 10 do 15 jako znaki, znalazlem podobne zadanie w c++ i sprobowalem tego sposobu lecz nie dziala i nie wiem z jakiego powodu.

 

int szesnastkowy(int x)
{
    int reszta;

    printf("Jest to reprezentacja szesnastkowa liczby x=%d\n", x);

    while(x!=0)
    {
        reszta=x%16;
        x=x/16;
        if(x>9)
        {
            if(x==10)
            printf("%c", 'A');
            if(x==11)
            printf("%d", 'B');
            if(x==12)
            printf("%d", 'C');
            if(x==13)
            printf("%d", 'D');
            if(x==14)
            printf("%d", 'E');
            if(x==15)
            printf("%d", 'F');
            if(x==16)
            printf("%d", 'G');
            }
            else printf("%d", x);

        }
    }

 

2 odpowiedzi

0 głosów
odpowiedź 18 listopada 2016 przez criss Mędrzec (172,590 p.)
wybrane 18 listopada 2016 przez Don Corleone
 
Najlepsza
Używasz %d więc jak ma wypisać szesnastkowo? Zamień %d na %x.
komentarz 18 listopada 2016 przez criss Mędrzec (172,590 p.)

Sorry, nie zauważyłem że można rozwinąć kod.. :-: zaraz ogarne

chwile pozniej..

Dlaczego właściwie nie napiszesz tego tak:

 

int szesnastkowy(int x)
{
  printf("%x", x);
}

 

komentarz 18 listopada 2016 przez Don Corleone Obywatel (1,210 p.)
Mój błąd, zapomnialem wstawic znaku konca lini i myslalem ze wychodza dziwne wyniki.

Z %d również działa ale dzieki za odpowiedz.
komentarz 18 listopada 2016 przez Don Corleone Obywatel (1,210 p.)
Rzeczywiscie, dzieki :)
komentarz 19 listopada 2016 przez criss Mędrzec (172,590 p.)

A co do twojego kodu - pomyliły ci sie zmienne. A poza tym w printfach w tych ifach powinien być %c (bo chcesz wyświetlić jako znak a nie jako liczbe). Czyli tak:

 int szesnastkowy(int x)
{
    int reszta;
 
    printf("Jest to reprezentacja szesnastkowa liczby x=%d\n", x);
 
    while(x!=0)
    {
        reszta=x%16;
        x=x/16;
        if(reszta>9)
        {
            if(reszta==10)
            printf("%c", 'A');
            if(reszta==11)
            printf("%c", 'B');
            if(reszta==12)
            printf("%c", 'C');
            if(reszta==13)
            printf("%c", 'D');
            if(reszta==14)
            printf("%c", 'E');
            if(reszta==15)
            printf("%c", 'F');
            if(reszta==16)
            printf("%c", 'G');
            }
            else printf("%d", reszta);
 
        }
    }

No i oczywiście musisz pamiętać że ta metoda konwersji daje "cyfry" liczby szesnastkowej od tyłu.

Druga sprawa, że można ten kod znacznie skrócić:

int szesnastkowy(int x)
{
    int reszta;
 
    printf("Jest to reprezentacja szesnastkowa liczby x=%d\n", x);
 
    while(x != 0)
    {
        reszta = x % 16;
        x /= 16;
        if(reszta > 9)
            printf("%c", 'A' + reszta - 10);
        else
            printf("%d", reszta);
    }
}

 

0 głosów
odpowiedź 19 listopada 2016 przez Miszo Bywalec (2,100 p.)

Skorzystaj z tebeli ASCII

char znak = '8'; // ==>56(dec)

if (x > 9)

{

x = znak + x - 1; // jeżeli x byłby 10, to x = 56 + 10 -1 = 65 , a 65 to A 

}

I to będzie działało dla każdej liczby, aż do skończnia się alfabetu, dzięki czmemu nie muisisz się ograniczać do szesnastkowego

Podobne pytania

0 głosów
1 odpowiedź 476 wizyt
0 głosów
2 odpowiedzi 671 wizyt
pytanie zadane 5 kwietnia 2017 w C i C++ przez AndekQR Użytkownik (880 p.)
0 głosów
3 odpowiedzi 923 wizyt
pytanie zadane 6 sierpnia 2015 w JavaScript przez Adam Jakś Dyskutant (8,940 p.)

93,023 zapytań

141,986 odpowiedzi

321,290 komentarzy

62,370 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...