Dziesiętna liczba na szesnastkową i szesnastkowa na dziesiętną
Ostatnio zmodyfikowano 2014-06-05 22:19
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: 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ą. |
|
pekfos |
» 2014-06-05 18:15:39 Wow, ale zagmatwane.. std::ostringstream i std::hex? Do czegoś niedawno pisałem podobną konwersję, poszukam kodu.. //edit: 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; |
|
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ą). |
|
pekfos |
» 2014-06-05 19:25:02 Można to rozpisać tak: char hex[] = "0123456789ABCDEF";
out[ --i ] = hex[ x % 16 ]; x /= 16; A tu nie ma czego tłumaczyć. |
|
mgrD Temat założony przez niniejszego użytkownika |
» 2014-06-05 22:19:44 Wow, coś pięknego : ) |
|
« 1 » |