Ich brauche eine base_convert()
-Funktion, die von der Basis 2 bis zur Basis 62 funktioniert, aber mir fehlt die Mathematik, die ich verwenden muss. Ich weiß, dass ich aufgrund der Einschränkungen von PHP bcmath verwenden muss gut.
Funktionen wie diese konvertieren eine Zahl zu und von Base 10 zu einer anderen Base bis zu 62 , aber ich möchte die gleiche Funktionalität von base_convert()
implementieren, zB: eine einzige Funktion, die zwischen beliebigen Basen konvertieren kann.
Ich habe eine Funktion gefunden, die dies zu tun scheint , aber es gibt Ich habe das Gefühl, einen überflüssigen und langsamen Code zu haben, und ich würde es gerne ein wenig verbessern, wenn ich Deutsch würde, was ich nicht weiß. = (
Hier ist eine besser lesbare Version der Funktion:
%Vor%Kann mir jemand die obige Funktion erklären oder mir etwas Licht auf den Prozess der direkten Umwandlung zwischen beliebigen Basen geben?
Bitte fragt mich nicht, wo ich es herbekommen habe, ich erinnere mich nur daran, dass es auf einigen Beispielen basiert, die ich im Internet gefunden habe ...
%Vor%Der einfachste Ansatz für Übersetzungsprobleme, von der numerischen Basis bis zur menschlichen Sprache, ist die Übersetzung über ein Zwischenformat.
%Vor% Jetzt brauchen Sie nur noch bc_convert_to
und bc_parse_num
zu schreiben. Wenn die Plattform numerische Typen unterscheidet, müssen Sie dies berücksichtigen. Auch Gleitkommazahlen erfordern eine spezielle Überlegung, da eine Zahl eine endliche Darstellung in einer Basis haben kann, aber nicht in einer anderen (z. B. 1/3 ist 0,1 3, aber 0,333 ... 10 10 / >, und 1/10 10 ist .0001100110011 ... 2 ).
Wie für eine allgemeine Erklärung, wie die Konvertierung funktioniert, sollten Sie sich überlegen, wie positionelle Basissysteme funktionieren. Eine Zahl der Form "a n a n-1 ... a 1 a <0> in a Basis b repräsentiert die Zahl "a n
Die meisten Beispiele, die ich im Internet gefunden habe und in diesen Antworten verwenden BC Math-Funktionen. Wenn Sie BC Math-Funktionen nicht verwenden möchten, können Sie sich diese Bibliothek ansehen: Ссылка
Ich schrieb über die Verwendung der BCMath-Funktionen für die Dezimal / Binär-Konvertierung hier: Ссылка . Sie können diesen Code leicht ändern, um ihn in verschiedene Basen zu konvertieren.
Wenn Sie beispielsweise ganze Zahlen konvertieren, ändern Sie die Routinen dec2bin_i () und bin2dec_i (). Benennen Sie sie um und fügen Sie einen Basisparameter hinzu - etwa dec2base_i ($ base, $ dezimal_i) und base2dec_i ($ base, $ num_i), ändern Sie die festcodierte '2' in die Variable $ base, konvertieren Sie die numerischen Reste in / aus Zeichen von die Basis und benenne die Variablen um.
Um nun zwischen beliebigen Basen zu konvertieren, verwenden Sie dezimal als Zwischenprodukt und rufen Sie diese beiden neuen Funktionen auf. Konvertieren Sie zum Beispiel Base 42 Nummer "123" in Base 59 indem Sie $ dec = base2dec_i ('42 ',' 123 ') gefolgt von $ b59 = dec2base_i (59, $ dez) aufrufen.
(Sie können auch eine kombinierte Funktion erstellen, die dies in einem Aufruf erledigt.)
Diese Funktion gibt dasselbe aus als GNU Multiple Precision wenn möglich ...
%Vor%Tags und Links math php base-conversion base62