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

c++ problem switch

Object Storage Arubacloud
0 głosów
222 wizyt
pytanie zadane 30 marca 2019 w C i C++ przez Marcinek69 Początkujący (450 p.)

Mam pewien problem, pierwszy podstawowy znajduje się w moim kodzie. Dlaczego w tej mojej funkcji ten switch nie działa?

14 razy wyskakuje error : case label "(od 2 do 14)" not within a switch statement.

string from2to16(string binary)
{
    string hex="";
    int length = binary.size();
    int parts = ceil(length/4);


    for(int i=0;i<parts*4;i+=4)
    {
        int partvalue=0;
        for(int j=i;j<i+4;j++)
        {
            if(binary[0]==1)
            {
                partvalue += 1;
            }
            if(binary[1]==1)
            {
                partvalue += 2;
            }
            if(binary[2]==1)
            {
                partvalue += 4;
            }
            if(binary[3]==1)
            {
                partvalue += 8;
            }
            switch(partvalue)
                case 1: hex+="1"; break;
                case 2: hex+="2"; break;
                case 3: hex+="3"; break;
                case 4: hex+="4"; break;
                case 5: hex+="5"; break;
                case 6: hex+="6"; break;
                case 7: hex+="7"; break;
                case 8: hex+="8"; break;
                case 9: hex+="9"; break;
                case 10: hex+="A"; break;
                case 11: hex+="B"; break;
                case 12: hex+="C"; break;
                case 13: hex+="D"; break;
                case 14: hex+="E"; break;
                case 15: hex+="F"; break;
        }
    }
    return hex;
}

Poza tym mam jeszcze inne pytanie, czy isnieją w c++ gotowe fukcje do zamiany w rózne systemy liczbowe i jesli nie, jak mam np. zamienić liczbe z systemu 10 do 11 ? bo do 8 czy 16 to wiem.

komentarz 30 marca 2019 przez Hiskiel Pasjonat (22,830 p.)
//możesz to zrobić praktycznie dwoma/trzema linijkami, ale co tam
komentarz 30 marca 2019 przez j23 Mędrzec (194,920 p.)

Zamiast switcha możesz zrobić tak:

 hex += "0123456789ABCDEF"[partvalue];

 

2 odpowiedzi

0 głosów
odpowiedź 30 marca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
wybrane 30 marca 2019 przez Marcinek69
 
Najlepsza

string from2to16(string binary)
{
    string hex="";
    int length = binary.size();
    int parts = ceil(length/4);
 
 
    for(int i=0;i<parts*4;i+=4)
    {A
        int partvalue=0;
        for(int j=i;j<i+4;j++)
        {
            if(binary[0]==1)
            {
                partvalue += 1;
            }
            if(binary[1]==1)
            {
                partvalue += 2;
            }
            if(binary[2]==1)
            {
                partvalue += 4;
            }
            if(binary[3]==1)
            {
                partvalue += 8;
            }
            switch(partvalue)
            { //Tutaj klamry ci brakowało
                case 1: hex+="1"; break;
                case 2: hex+="2"; break;
                case 3: hex+="3"; break;
                case 4: hex+="4"; break;
                case 5: hex+="5"; break;
                case 6: hex+="6"; break;
                case 7: hex+="7"; break;
                case 8: hex+="8"; break;
                case 9: hex+="9"; break;
                case 10: hex+="A"; break;
                case 11: hex+="B"; break;
                case 12: hex+="C"; break;
                case 13: hex+="D"; break;
                case 14: hex+="E"; break;
                case 15: hex+="F"; break;
        }//Tutaj chyba jest koniec switcha
    }
    return hex;
}

 

0 głosów
odpowiedź 30 marca 2019 przez Marcinek69 Początkujący (450 p.)
PS. Niemam pojęcia czy ten kod działa bo jeszcze go nie testowałem, narazie chodzi mi o ten switch a później będę się martwić o poprawnosc kodu ;)
komentarz 30 marca 2019 przez j23 Mędrzec (194,920 p.)

Działać poprawnie nie będzie, bo liczy tylko pierwsze (albo ostatnie) cztery bity. Jeśli w binary trzymasz tekst, to te porównania znaków do wartości 1 są błędne.

komentarz 30 marca 2019 przez Marcinek69 Początkujący (450 p.)
string from10to2(int x)
{
    string binary="";
    while(true)
    {
        if(x%2==0)
        {
            binary+="1";
        }
        else
        {
            binary+="0";
        }
        if(x==0)
        {
            break;
        }
    }

    return binary;
}

A ta funkcja też jest zle napisana ? bo cos nie działa, a wszystko wygląda logicznie (wedlug mnie)

komentarz 30 marca 2019 przez j23 Mędrzec (194,920 p.)

x % 2 nie powoduje zmiany wartości zmiennej x, dlatego nie działa.

komentarz 30 marca 2019 przez Marcinek69 Początkujący (450 p.)
A no tak, niby taka oczywistość.. :D

A mógłbyś mi jakoś obszerniej wytłumaczyć jak mam napisać tą funkcje from2to16? Bo nie wiem jak mam to napisać żeby to działało w takim razie. Wiem że już mi odpisałeś ale niezrozumiałem jakos ;/ I dzieki za dotychczasowa pomoc :)
komentarz 30 marca 2019 przez j23 Mędrzec (194,920 p.)
std::string from10to2(int x)
{
    std::string binary;
    unsigned mask = 0x80000000;
    while(mask) { binary += x & mask ? '1' : '0'; mask >>= 1; }
    return binary;
} 

 

Podobne pytania

0 głosów
4 odpowiedzi 490 wizyt
0 głosów
2 odpowiedzi 315 wizyt
pytanie zadane 1 kwietnia 2016 w C i C++ przez veryhotshark Obywatel (1,620 p.)
0 głosów
3 odpowiedzi 222 wizyt
pytanie zadane 28 grudnia 2015 w C i C++ przez Vertixen Początkujący (250 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...