Zahlen von beliebigen basen in beliebigen basen umwandeln

Weil er den String von hinten nach vorne einliest, denn die linken Stellen einer Zahl haben die höhere Wertigkeit. Er multipliziert jede 'Ziffer' mit ihrem Wert, und bei der Stelle mit der Wertigkeit 1 (=b^0) beginnt er mit der Berechnung. Und bei jeder neuen Ziffer berechnet er deren Wertigkeit, indem er sukzessive b mit der Basis multipliziert.
In der vorhergehenden while-Schleife erhöht er den String-Zeiger, bis er das Stringende erreicht hat. Die Syntax ist korrekt, kann aber auf manchen irritierend wirken, weil er die geschweiften Klammern weggelassen hat.

C++:
// Und benutze das nächste Mal bitte die cpp-Tags
 
vielen dank für die antwort, aber eines habe ich noch nicht zu dieser funktion verstanden
 
Zuletzt bearbeitet von einem Moderator:
outbuffer ist der String, in den das Ergebnis hineingeschrieben werden soll, damit das aufrufende Programm die 'Zahlen' auch zurückgeliefert bekommt. Dazu wird erst der Ziffernstring in die lokale Variable btwPuffer geschrieben (btw = bitte wenden?), allerdings sind diese Ziffern dann in der verkehrten Reihenfolge (die Einer-Stelle steht links). In der zweiten Schleife werden die Ziffernzeichen dann in umgekehrter Reihenfolge in den outbuffer geschrieben; danach wird noch ein Stringende-Kennzeichen angehängt.
 
Nein, diese Anweisung dient nur dazu, das Stringende zu kennzeichnen, damit keine Chaossymbole mit ausgegeben werden. outbuffer wird innerhalb der for-Schleife immer weitergezählt (++outbuffer), und zeigt deswegen stets auf den nächsten freien Platz für ein neues Zeichen. btwPuffer wird von hinten her ausgelesen, denn die for-Schleife läuft von buffPos-1 bis 0.
 
Danke Vereth, ich denke du wirst mein retter in letzter Not, wobei ich durch probieren sehr viele Erkenntnisse gewonnen habe,
 
Zuletzt bearbeitet:
Zu dezipart1:
In der ersten while-Schleife zählt er beginn hoch, bis er am Stringende angekommen ist; das erkennt er am Nullzeichen, das jedes Stringende kennzeichnet. Dies ist die Schleife, die das macht:
C:
while( *c!=0)
c=c+1;
In der nachfolgenden do-Schleife zählt er diesen Zeiger wieder herunter, bis er wieder am Anfang angekommen ist, erkennbar am Vergleich (c != beginn). Er arbeitet den String also von hinten nach vorne ab, und bearbeitet dadurch zuerst die Einer-Stelle und danach die immer höherwertigen Stellen, bis er am Anfang angekommen ist.

Zu dezipart2:
Der Rückgabewert ist void, weil er das Ergebnis in den String schreibt, auf den der Parameter outbuffer zeigt. Dies kann man durchaus als Seiteneffekt bezeichnen. Es muss also kein Wert mit return zurückgeliefert werden, weil das Ergebnis in den vom aufrufenden Programm übergebenen String geschrieben wird. Deine Frage kann ich dir leider nicht beantworten, weil nicht erkennbar ist, worauf sie sich bezieht.

PS: Normalerweise wird hier jeder geduzt, auch Du ;)
 
Besten dank nochmal velveth, ich komme echt weiter durch dir, habe auch viele Bücher bei c++ durchgelesen und bei
 
Zuletzt bearbeitet von einem Moderator:
Diese Funktion ist tatsächlich eine Art Typumwandlung. Sie weist den Zeichen '0'-'9' den Wert 0-9 zu, und den Zeichen 'A'-'Z' den Wert 10-25.
 

Neue Beiträge

Zurück