Hexadecimala till decimala tal, hur gör man??

Permalänk
Medlem

Hexadecimala till decimala tal, hur gör man??

Hur skriver jag ett hexadecimalt tal tex 2E.8 med basen 16 ofc... Till ett decimalt tal?:)

Har fastnat lite, skulle vara schysst om ngn bara hjälpte mig lite snabbt:)

Permalänk
Skrivet av eAsty:

Hur skriver jag ett hexadecimalt tal tex 2E.8 med basen 16 ofc... Till ett decimalt tal?:)

Har fastnat lite, skulle vara schysst om ngn bara hjälpte mig lite snabbt:)

Första steget är att räkna ut vad bokstäverna har för värde, A=10 B=11 osv. Med ditt exempel så bli det: 2*16^1 + E*16^0 + 8*16^-1 = 2*16 + 14*1 + 8/16 = 46,5 decimalt. För varje steg framåt du tar multiplicerar du med 16 och för varje steg bakåt dividerar med 16.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem
Skrivet av gaminggirl:

Första steget är att räkna ut vad bokstäverna har för värde, A=10 B=11 osv. Med ditt exempel så bli det: 2*16^1 + E*16^0 + 8*16^-1 = 2*16 + 14*1 + 8/16 = 46,5 decimalt. För varje steg framåt du tar multiplicerar du med 16 och för varje steg bakåt dividerar med 16.

Alltså tack såå jätte mycket!!:)

Permalänk
Skrivet av gaminggirl:

Första steget är att räkna ut vad bokstäverna har för värde, A=10 B=11 osv. Med ditt exempel så bli det: 2*16^1 + E*16^0 + 8*16^-1 = 2*16 + 14*1 + 8/16 = 46,5 decimalt. För varje steg framåt du tar multiplicerar du med 16 och för varje steg bakåt dividerar med 16.

Jag lånar tråden lite.
Motsatsen då? Konvertera decimaltal till t.ex binära eller hexadecimala (beroende på radix).

Jag gjorde ett par funktioner för ett tag sen till PAWN (AMXx / CS 1.6) där jag använde "%" (vet inte vad funktionen kallas, har därför svårigheter att googla mig till svaret) och dividerade med radix för att få ut rätt siffror. Dock fungerar inte "%" på decimaltal, endast heltal. Vad använder jag istället?

Här är koden jag använde för att konvertera från heltal till t.ex. hexadecimal:

new ___key[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; stock itoa(val, out[], len, radix = Decimal) { if ( ! val ) { out[0] = '0'; out[1] = 0; return; } if ( ! ( 2 <= radix <= 36 ) ) { out[0] = '0'; out[1] = 0; return; } for ( new i = len ; i ; i-- ) { out[i] = 0; } for ( new i = len - 1 ; val && i > -1 ; --i, val /= radix ) out[len-i-1] = ___key[val % radix]; new len2 = strlen(out); new temp; for ( new i = 0 ; i < len2 / 2 ; i++ ) { temp = out[i]; out[i] = out[len2-i-1]; out[len2-i-1] = temp; } }

och sen t.ex:

new string[32]; itoa(255, string, 31, 16);

Permalänk
Medlem
Skrivet av StabTheDrama:

Jag lånar tråden lite.
Motsatsen då? Konvertera decimaltal till t.ex binära eller hexadecimala (beroende på radix).

Jag gjorde ett par funktioner för ett tag sen till PAWN (AMXx / CS 1.6) där jag använde "%" (vet inte vad funktionen kallas, har därför svårigheter att googla mig till svaret) och dividerade med radix för att få ut rätt siffror. Dock fungerar inte "%" på decimaltal, endast heltal. Vad använder jag istället?

Här är koden jag använde för att konvertera från heltal till t.ex. hexadecimal:

new ___key[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; stock itoa(val, out[], len, radix = Decimal) { if ( ! val ) { out[0] = '0'; out[1] = 0; return; } if ( ! ( 2 <= radix <= 36 ) ) { out[0] = '0'; out[1] = 0; return; } for ( new i = len ; i ; i-- ) { out[i] = 0; } for ( new i = len - 1 ; val && i > -1 ; --i, val /= radix ) out[len-i-1] = ___key[val % radix]; new len2 = strlen(out); new temp; for ( new i = 0 ; i < len2 / 2 ; i++ ) { temp = out[i]; out[i] = out[len2-i-1]; out[len2-i-1] = temp; } }

och sen t.ex:

new string[32]; itoa(255, string, 31, 16);

Lättaste är att kolla om det finns plats och isf dra av det. Alltså om du har decimala talet 19,35 så kollar du först om 16^1 får plats. Det gör det och det får plats en gång så då blir första talet en 1:a och du har kvar 19,35-16^1=3,35.
1x.xxxx
Sedan kollar du om 16^0 får plats, det gör det 3 gånger. Andra talet blir en 3:a och du har nu 13,xx. Du har kvar 0,35
Sedan kollar du om 16^-1 får plats, och det går 5 gånger. Du har nu 0,0357 kvar.
Sedan kolalr du om 16^-2 får plats osv.

Sedan kan du omsätta detta till kod, förslagsvis där du använder en for-loop där räknaren symbolerar vilket värde basen är upphöjd i. I detta fall 16^räknare.

edit.
Och % är modulo d.v.s. restdivition. Används ofta innom programmering och datakryptering, samt viss diskret matematik.

Visa signatur

In the end what separates a man from a slave?
Money? Power? No... A man chooses, a slave obeys.
ASUS Z170M-PLUS || Intel Core i7 6700k @ 4,7GHz || 64GB 2133MHz Corsair RAM || MSI NVIDIA RTX 2070 Gaming Z 8GB || Bifenix Prodigy M || 2x CZ TR150 480GB RAID 0 || BeQuiet DarkRock Pro

Permalänk
Skrivet av lollol7:

Lättaste är att kolla om det finns plats och isf dra av det. Alltså om du har decimala talet 19,35 så kollar du först om 16^1 får plats. Det gör det och det får plats en gång så då blir första talet en 1:a och du har kvar 19,35-16^1=3,35.
1x.xxxx
Sedan kollar du om 16^0 får plats, det gör det 3 gånger. Andra talet blir en 3:a och du har nu 13,xx. Du har kvar 0,35
Sedan kollar du om 16^-1 får plats, och det går 5 gånger. Du har nu 0,0357 kvar.
Sedan kolalr du om 16^-2 får plats osv.

Sedan kan du omsätta detta till kod, förslagsvis där du använder en for-loop där räknaren symbolerar vilket värde basen är upphöjd i. I detta fall 16^räknare.

edit.
Och % är modulo d.v.s. restdivition. Används ofta innom programmering och datakryptering, samt viss diskret matematik.

Tack för hjälpen. Jag ska prova när jag får lite tid över.