Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nieprawidłowa konwersja liczby całkowitej z systemu dziesiętnego na szesnastkowy

Ostatnio zmodyfikowano 2018-09-17 16:13
Autor Wiadomość
HamesJetfield
Temat założony przez niniejszego użytkownika
Nieprawidłowa konwersja liczby całkowitej z systemu dziesiętnego na szesnastkowy
» 2018-09-17 15:21:34
Witam,
chcę zrobić funkcję void, która dla podanej zmiennej całkowitej w systemie dziesiętnym wypisze na ekran jej odpowiednik w systemie szesnastkowym. Niestety, po uruchomieniu funkcja nie wypisuje nic na ekran. W czym może tkwić problem? Z góry przepraszam, jeżeli coś źle zrobiłem przy zakładaniu tematu i dziękuję za pomoc!
C/C++
#include <iostream>

using namespace std;

void printint( int x )
{
    int pom = 0, pom2, mod, z;
   
    z = x;
   
    do
    {
        z = z / 16;
        pom++;
    }
    while( z >= 16 ); //zliczanie dlugosci liczby w systemie hex
   
    pom2 = pom;
    string liczba;
   
   
    for( int i = 0; i < pom2; i++ ) //wpisanie wyników działania modulo do zmiennej liczba
    {
        mod = x % 16;
        if( mod >= 0 && mod <= 9 )
        {
            liczba[ pom - 1 ] = mod;
        }
        else
        {
            switch( mod )
            {
            case 10:
                liczba[ pom - 1 ] = 65;
                break;
               
            case 11:
                liczba[ pom - 1 ] = 66;
                break;
               
            case 12:
                liczba[ pom - 1 ] = 67;
                break;
               
            case 13:
                liczba[ pom - 1 ] = 68;
                break;
               
            case 14:
                liczba[ pom - 1 ] = 69;
                break;
               
            case 15:
                liczba[ pom - 1 ] = 70;
                break;
            }
        }
       
       
       
        x = x / 16;
        pom--;
       
       
    }
    cout << liczba;
}
int main()
{
    printint( 1 );
    return 0;
}
P-172331
mateczek
» 2018-09-17 15:57:44
nie możesz się odwoływać do za pomocą operatora[] do stringa który nie ma zarezerwowanej pamięci. i ma rozmiar zerowy
C/C++
#include <iostream>
#include<string>
using namespace std;

void printint( int x )
{
    string wynik_hex;
    while( x ) {
        int kod = x % 16;
        x /= 16;
        if( kod >= 10 )
             wynik_hex.insert( wynik_hex.begin(), kod - 10 + 'a' ); // dla większychy od 16 przykład kod = 12-10=2; 2+"a"="c"
        else
             wynik_hex.insert( wynik_hex.begin(), kod + '0' );
       
    }
    cout << wynik_hex << endl;
}
int main()
{
    printint( 255 );
    return 0;
}


co do twojego kodu to

C/C++
string liczba;
liczba.resize( pom ); //dodaj linijkę rozszerzającą string

//zamiast
//liczba[ pom - 1 ] = mod;
//powinno być
liczba[ pom - 1 ] = mod + '0';
// pętla licząca rozmiar to chyba tak
do
{
    z = z / 16;
    pom++;
}
while( z );

//
P-172333
HamesJetfield
Temat założony przez niniejszego użytkownika
» 2018-09-17 16:13:29
Dziękuję bardzo za przejrzystą odpowiedź! :)
P-172334
« 1 »
  Strona 1 z 1