Hallo! Vor einiger Zeit hat Yalu X. (yalu) hier Beitrag "Umwandlung von langen Dezimalzahlen als String in Hex" einen super elegante Routine dec2bin gepostet die einen String von Dezimalzahlen in Binär/HEX umwandelt. Meine Frage ist nun wie das Pendant dazu, also bin2dec aussieht um eine "beliebig" lange Binärzahl nach dezimal zu wandeln. Beispiel: Aus A76F609E775AD3F28007A soll 12651036053835495342866554 werden. Wenn die Eingabe oder Ausgabe in einer anderen Reihenfolge ausgegeben wird, ist das kein Problem. Das kann man dann ja einfach passend umwandeln. Grüße, Bernhard
Im Prinzip geht das genau andersherum: In dec2bin wird in einer Schleife jeweils das Ergebnis mit 10 multipliziert und eine Dezimalziffer addiert. In bin2dec wird in einer Schleife jeweils die Binärzahl durch 10 dividiert, der dabei entstehende Rest ergibt eine Dezimalziffer des Ergbenisses. Hier ist der entsprechende Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
Die Division der großen Binärzahl durch 10 geschieht in der inneren
Schleife. Das Divisionsergebnis steht anschließend wieder in bin, der
Divisionsrest in r. Da bin mit jeder Division kleiner wird, entstehen
führende Nullbytes, die mit if(*bin == 0) {...} abgeschnitten werden.
Sobald die Länge der Binärzahl auf 0 geschrumpft ist, ist die
Konvertierung abgeschlossen. Bei drohendem Pufferüberlauf von buffer
wird der Algorithmus vorzeitig abgebrochen.
Ich hoffe, dass nicht allzu viele Fehler in dem Code sind :)
Hallo Yalu, funktioniert einwandfrei :) Vielen Dank! lg Bernhard
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.