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

Dziesiętna liczba na szesnastkową i szesnastkowa na dziesiętną

Ostatnio zmodyfikowano 2014-06-05 22:19
Autor Wiadomość
mgrD
Temat założony przez niniejszego użytkownika
Dziesiętna liczba na szesnastkową i szesnastkowa na dziesiętną
» 2014-06-05 17:40:56
Witam, robię taki programik, który konwertuje dane liczby na różne systemy i te początkowe mam już za sobą, natomiast kłopot mi się wydarzył z systemem szesnastkowym.
Trochę do tego podszedłem jak np. do binarnego i...

Powinno wyświetlić 5A9C a wyświetla 95A9C, powinno wyświetlić 8D7F1 a pokazuje 178D17F1
Czasem jest prawie dobrze, a czasem kompletnie jakaś hybryda -,-

kod:
C/C++
void dec2hex( int l )
{
    int i = 0, w;
    std::string tab[ 31 ];
    std::ostringstream ss;
    while( l )
    {
        if( l % 16 >= 0 && l % 16 <= 9 )
        {
            w = l % 16;
            ss << w;
            tab[ i++ ] += ss.str();
        }
        else if( l % 16 == 10 ) tab[ i++ ] += 'A';
        else if( l % 16 == 11 ) tab[ i++ ] += 'B';
        else if( l % 16 == 12 ) tab[ i++ ] += 'C';
        else if( l % 16 == 13 ) tab[ i++ ] += 'D';
        else if( l % 16 == 14 ) tab[ i++ ] += 'E';
        else if( l % 16 == 15 ) tab[ i++ ] += 'F';
       
        l /= 16;
    }
   
    for( int j = i - 1; j >= 0; j-- ) std::cout << tab[ j ];
   
}

Ktoś ma jakiś pomysł na naprawę tej funkcji lub kompletnie nową? Nie ukrywam, że nie mam pomysłu też na zamianę odwrotną.
P-111486
pekfos
» 2014-06-05 18:15:39
Wow, ale zagmatwane..

lub kompletnie nową?
std::ostringstream i std::hex?

Do czegoś niedawno pisałem podobną konwersję, poszukam kodu..

//edit:
C/C++
char out[ 32 ];
int i = 31;
unsigned long x = 0;
out[ i ] = 0;

std::cin >> x;

if( !x )
{
    out[ --i ] = '0';
}
else do
{
    out[ --i ] = "0123456789ABCDEF"[ x & 15 ];
    x >>= 4;
}
while( x );

std::cout << out + i;
P-111488
mgrD
Temat założony przez niniejszego użytkownika
» 2014-06-05 18:49:10
No właśnie std::hex nie może być bo muszę mieć własną metode(polecenie szkolne). Sprawdzę twój kod :)

#edit:
No twój kod pierwsza klasa, działa pięknie - dałby rade coś napisać o kodzie wewnątrz pętli? Tam jest przesuwanie bita o 4 miejsca czy co? (plus "out[ --i ] = "0123456789ABCDEF"[x & 15]; " mnie zadziwiło troche)
+ Czy masz może tez metodę na zamianę w drugą stronę? (z szesnastkowej na dziesiętną).
P-111496
pekfos
» 2014-06-05 19:25:02
Można to rozpisać tak:
C/C++
char hex[] = "0123456789ABCDEF";
//
out[ --i ] = hex[ x % 16 ];
x /= 16;
A tu nie ma czego tłumaczyć.
P-111499
mgrD
Temat założony przez niniejszego użytkownika
» 2014-06-05 22:19:44
Wow, coś pięknego : )
P-111535
« 1 »
  Strona 1 z 1