Hallo,
also prinzipiell:
aus
rcswww.urz.tu-dresde...uff/Inf1/17Okt03.pdf
...
Umwandlung aus Darstellung mit Ausgangsbasis in Darstellung mit
Zielbasis
Zwei Varianten m¨oglich:
1. Jede Stelle der Zahl mit dem Stellenwert in Zieldarstellung multiplizieren.
Beispiele:
– bin ! dez: 100112 = 1 24 +1 21 +1 20 = 16+2+1 = 19
– dez ! hex: 32710 = 364H+2AH+7 = 12CH+14H+7 =
147H
– dez ! oct: 32710 = 3144O+212O+7 = 454O+24O+7O =
507O
2. Zweite M¨oglichkeit:
(a) Zahl durch Zielbasis dividieren
(b) Rest ist niederwertigste Stelle des Ergebnisses
(c) Quotienten wieder durch Zielbasis dividieren
(d) Rest ist n¨achste Stelle des Ergebnisses
(e) Solange bis c fortsetzen bis Quotient = 0
.....
Ich benutze die erste Variante, indem ich parallel den Stellenwert im Zielsystem erzeuge.
Delphi-Quelltext
1: 2: 3:
| if (Bas1 AND Vergleich)<>0 then ADD_Feld(Summ1Feld^,Summ2Feld^,Feld2_Index,Bas2) |
Statt multiplizeren nutze ich addieren und schieben, da ich so immer leicht in der Zielbasis bleibe.
grosse Zahl als String:
Z='1234567890123456789012345678901234567890.1234567890123456789012345678901234567890'
Z aufteilen in Vorkomma Vz und Nachkommaanteil Nz.
Vorkommaanteil in eine verarbeitbare Basis, die der Komputer schon selbst umwandeln kann (StrToInt)
Also eine 1o-er Potenz von p=1 bis 8. Eine grosse Basis wird sehr viel schneller von meinem Progeramm verarbeitet wie in dem Beitrag zu lesen.
Also aus dem String Vz von hinten nach vorne in Gruppen der Laenge p zerteilen, eventuell führende Nullen ergänzen.
Bei Basis 10 ist p = 1 und jede Ziffer waere in einem Byte von ZahlBasis10 zu speichern.
Diese kann man jetzt durch
BasKonv(10,256,ZahlBasis10,ZahlBasis256);
in die Basis 256 umwandeln.
Die Nachkommastellen umzuwandeln ist doch eine schöne Aufgabe...(Wie geht denn dass???? Basis1Zahl multiplizieren mit Basis2 und die Stellen vor dem Komma abtrennen,umwandeln nach Basis2 und eintragen... )
Gruss Horst