konverter kommatal til hex

Tags:    c++

hvordan konvertere man et kommatal til hexidecimal?

mine variabler er i float.

hilsen agent birg067



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Dette er ikke så meget en specifik C/C++opgave, men derimod en opgave hvor du skal tænke lidt.

Når man generelt har med kommatal at gøre i andre baser end 10, f.eks. 16, skal man bruge det der bliver kaldt, repeated multiplication. Først og fremmest skal du have delt din float værdi op. Den "højere" del og den "lavere" del.
Fold kodeboks ind/udKode 

Derefter starter du ud med at tage kommatallet (0.39) og ganger det med 16, der er vores base, da det er hexadecimal. Derefter tager man den "højere" del, og konvertere til det enkelt hexadecimalnummer. I vores tilfælde bliver dette 6, og vores "lavere" del, vi skal bruge er 0.24. Dette fortsætter man med indtil den "lavere" del er 0, eller hvis det er et "uendeligt" kommatal, stopper man når man mener det er nok. Her udfører vi med 0.39:
Fold kodeboks ind/udKode 

På denne måde har vi fået selve kommatallet, af vores float-nummer. Nu mangler vi bare den resterende del, 18.
Tallet 18, kan dog gøres på den "normale" måde, uden alt muligt. Så vi tager den tradionelle dec-to-hex-metode, som jeg har valgt at kalde den. Her tager vi tallet, dividere med 16, vores base (hex), så tager vi værdien, og gemmer. Og efterladenskaberne, hvis der blev noget tilovers, hvis det ikke var et lige tal, konvertere vi til hex, og bruger det i vores resultat.
Fold kodeboks ind/udKode 

Dette var selvfølgelig to små tal, men resultatet er rigtigt. Nu skal vi bare sætte dem sammen.
Fold kodeboks ind/udKode 

Nu har du grundidéen til at gøre det i C/C++.
Hvis du gør det i C++, ville jeg foretrækker først at lægge floating-typen i en stringstream og derefter videre til en string. Strengen deler du op, ligesom vi har gjort, og derefter bliver den "højere" del konverteret til integer, og vores "lavere" del bliver konverteret til floating-typen.
Fold kodeboks ind/udKode 

Håber dette gav dig stof nok til at komme igang!



Jeg er ikke sikker på at det giver mening at udskrive et floating point tal som hex.

Hvordan forventer du at output skal se ud?



Derefter starter du ud med at tage kommatallet (0.39) og ganger det med 16, der er vores base, da det er hexadecimal. Derefter tager man den "højere" del, og konvertere til det enkelt hexadecimalnummer. I vores tilfælde bliver dette 6, og vores "lavere" del, vi skal bruge er 0.24. Dette fortsætter man med indtil den "lavere" del er 0, eller hvis det er et "uendeligt" kommatal, stopper man når man mener det er nok. Her udfører vi med 0.39:
Fold kodeboks ind/udKode 



Fatter hat af denne del.
hvorfor tager man ikke bare .39 som et heltal og laver om til hex. f.esk. 39 er 27 hex, og så sætter dem sammen?




Indlæg senest redigeret d. 15.03.2007 08:29 af Bruger #6726
Jeg ved ærligt talt ikke grunden til dette.
Dette er bare sådan jeg har lært det for længe siden, og det er sådan at det er på sider der beskriver netop det.
Du kan få meget mere information om float=>hex, ved brug af Google, eller andre lignende søgemaskiner.
Dette var bare mit bedste bud.



t