BaseConversion ist eine PHP-Bibliothek zum Konvertieren von Zahlenbasen, ähnlich der in PHP integrierten Funktion base_convert()
. Im Gegensatz zur integrierten Funktion ist diese Bibliothek jedoch nicht auf 32-Bit-Ganzzahlen beschränkt und kann Zahlen beliebiger Genauigkeit konvertieren. Diese Bibliothek unterstützt auch die Konvertierung von Brüchen und ermöglicht eine stärkere Anpassung der Zahlenbasen.
Um die Konvertierung großer Zahlen zu optimieren, verwendet diese Bibliothek außerdem zwei verschiedene Konvertierungsstrategien. In einigen Fällen ist es möglich, Zahlen einfach durch Ersetzen der Ziffern durch Ziffern der anderen Basis umzuwandeln (z. B. bei der Konvertierung von Basis 2 in Basis 16). Dies ist erheblich schneller als die andere Strategie, bei der die neue Zahl einfach mithilfe einer Ganzzahlarithmetik mit beliebiger Genauigkeit berechnet wird.
Die API-Dokumentation, die mit Apigen generiert werden kann, kann online gelesen werden unter: http://kit.riimu.net/api/baseconversion/
gmp
(nur erforderliche IDN-Unterstützung) Der einfachste Weg, diese Bibliothek zu installieren, besteht darin, Composer zum Verwalten Ihrer Abhängigkeiten zu verwenden. Um diese Bibliothek über Composer zu installieren, befolgen Sie einfach diese beiden Schritte:
Erwerben Sie die composer.phar
, indem Sie die Composer-Befehlszeileninstallation in Ihrem Projektstammverzeichnis ausführen.
Sobald Sie das Installationsskript ausgeführt haben, sollte sich die Datei composer.phar
in Ihrem Projektstammverzeichnis befinden und Sie können den folgenden Befehl ausführen:
php composer.phar require "riimu/kit-baseconversion:^1.2"
Nachdem Sie diese Bibliothek über Composer installiert haben, können Sie die Bibliothek laden, indem Sie die Datei vendor/autoload.php
einbinden, die von Composer während der Installation generiert wurde.
Wenn Sie bereits mit der Verwendung von Composer vertraut sind, können Sie die Bibliothek alternativ als Abhängigkeit hinzufügen, indem Sie die folgende Datei composer.json
zu Ihrem Projekt hinzufügen und den composer install
Installationsbefehl ausführen:
{
"require" : {
"riimu/kit-baseconversion" : " ^1.2 "
}
}
Wenn Sie Composer nicht zum Laden der Bibliothek verwenden möchten, können Sie die Bibliothek auch manuell herunterladen, indem Sie die neueste Version herunterladen und den Ordner src
in Ihr Projekt extrahieren. Anschließend können Sie die bereitgestellte Datei src/autoload.php
einschließen, um die Bibliotheksklassen zu laden.
Die bequemste Möglichkeit, diese Bibliothek zu verwenden, ist die statische Methode baseConvert()
die von der BaseConverter
-Klasse bereitgestellt wird. In den meisten Fällen funktioniert es genauso wie base_convert()
. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' A37334 ' , 16 , 2 ); // outputs: 101000110111001100110100
Die Methode akzeptiert negative Zahlen und Brüche auf die gleiche Weise. Mit einem optionalen vierten Parameter kann die Genauigkeit der Konvertierung definiert werden. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' -1BCC7.A ' , 16 , 10 ) . PHP_EOL ; // outputs: -113863.625
echo BaseConverter:: baseConvert ( ' -1BCC7.A ' , 16 , 10 , 1 ); // outputs: -113863.6
Die statische Methode ist lediglich ein praktischer Wrapper zum Erstellen einer Instanz von BaseConvert
und zum Aufrufen der Methoden setPrecision()
und convert()
. Wenn Sie mehrere Zahlen konvertieren müssen, ist es effizienter, das Objekt nicht statisch aufzurufen. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
$ converter = new BaseConverter ( 16 , 10 );
echo $ converter -> convert ( ' A37334 ' ) . PHP_EOL ; // outputs: 10711860
echo $ converter -> convert ( ' -1BCC7.A ' ) . PHP_EOL ; // outputs: -113863.625
$ converter -> setPrecision ( 1 );
echo $ converter -> convert ( ' -1BCC7.A ' ); // outputs: -113863.6
Wenn die angegebene Zahl ungültige Ziffern enthält, die nicht Teil der definierten Zahlenbasis sind, gibt die Methode stattdessen „false“ zurück.
Obwohl diese Bibliothek die Konvertierung von Brüchen unterstützt, ist es wichtig zu verstehen, dass Brüche nicht immer genau auf die gleiche Weise von der Zahlenbasis in eine andere umgewandelt werden können wie ganze Zahlen. Dies liegt daran, dass nicht alle Brüche in einer anderen Zahlenbasis dargestellt werden können.
Nehmen wir zum Beispiel an, wir haben die Zahl 0,1 zur Basis 3. Dies entspricht 1/3 zur Basis 10. Wenn Sie jedoch 1/3 als Dezimalzahl darstellen würden, würden Sie eine sich unendlich wiederholende Zahl „0,3333“ erhalten. ..'. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 ) . PHP_EOL ; // outputs: 0.33
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 , 6 ) . PHP_EOL ; // outputs: 0.333333
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 , 12 ); // outputs: 0.333333333333
Aufgrund dieses Verhaltens ist es möglich, die Genauigkeit festzulegen, die für ungenaue Bruchumrechnungen verwendet wird. Wie im vorherigen Beispiel zu sehen ist, definiert der Präzisionswert die maximale Anzahl von Ziffern in der resultierenden Zahl. Das Ergebnis kann jedoch weniger Ziffern enthalten, wenn die Zahl mit einer kleinen Anzahl von Ziffern genau konvertiert werden kann. Die Genauigkeit kann auch völlig vernachlässigt werden, wenn der Umrechner weiß, dass er die Brüche genau umrechnen kann.
Für den Präzisionswert gibt es auch eine alternative Definition. Wenn die Genauigkeit 0 oder eine negative Zahl ist, basiert die maximale Anzahl von Ziffern in der resultierenden Zahl auf der Genauigkeit der ursprünglichen Zahl. Wenn die Genauigkeit 0 ist, hat die resultierende Zahl so viele Ziffern, wie nötig sind, um die Zahl mit derselben Genauigkeit wie die ursprüngliche Zahl darzustellen. Eine negative Zahl erhöht einfach zusätzlich die Anzahl der Ziffern. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 0.A7 ' , 16 , 10 , 0 ) . PHP_EOL ; // outputs: 0.652
echo BaseConverter:: baseConvert ( ' 0.A7 ' , 16 , 10 , - 2 ); // outputs: 0.65234
Im vorherigen Beispiel ist die ursprüngliche Zahl 0.A7
zur Basis 16. Eine Zahl zur Basis 16 mit zwei Ziffern im Bruchteil kann eine Zahl mit einer Genauigkeit von 1/(16 * 16) == 1/256
darstellen. Um den Bruchteil mit der gleichen Genauigkeit in der Basis 10 darzustellen, benötigen wir mindestens 3 Ziffern, da zwei Ziffern nur Zahlen mit einer Genauigkeit von 1/100
darstellen können.
Der von der Bibliothek verwendete Standardgenauigkeitswert ist -1
. Es ist auch wichtig zu beachten, dass die letzte Ziffer nicht gerundet wird (da dies in manchen Fällen zu inkonsistenten Ergebnissen führen würde).
Um die Benutzerinteraktion mit der Bibliothek komfortabler zu gestalten, behandelt die Bibliothek alle Zahlen ohne Berücksichtigung der Groß- und Kleinschreibung, es sei denn, die Zahlenbasis verbietet dies. Beispielsweise kann die Basis 16 ohne Berücksichtigung der Groß-/Kleinschreibung behandelt werden, da sie nur den Wert für die Ziffern 0-9A-F
definiert. Allerdings kann die Basis 62 nicht ohne Berücksichtigung der Groß-/Kleinschreibung behandelt werden, da Buchstaben wie A
und a
einen unterschiedlichen Wert haben.
Die zurückgegebenen Zahlen berücksichtigen immer die durch die Zahlenbasis definierte Groß- und Kleinschreibung. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 7BFA11 ' , 16 , 12 ) . PHP_EOL ; // outputs: 2879B29
echo BaseConverter:: baseConvert ( ' 7bfa11 ' , 16 , 12 ); // outputs: 2879B29
Eine der Funktionen dieser Bibliothek besteht darin, dass sie eine viel bessere Anpassung von Zahlenbasen ermöglicht als base_convert()
. In den meisten Fällen werden Sie die Zahlenbasis wahrscheinlich mit einer einfachen Ganzzahl wie 10
oder 16
definieren. Es gibt jedoch keine Begrenzung für die Größe dieser Ganzzahl. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 7F ' , 16 , 1024 ) . PHP_EOL ; // outputs: #0127
echo BaseConverter:: baseConvert ( ' 5Glm1z ' , 64 , 512 ); // outputs: #456#421#310#371
Bei großen Zahlenbasen werden die Ziffern jedoch einfach durch eine Zeichenfolge dargestellt, die aus #
und dem Wert für die Ziffer besteht. Immer wenn die Zahlenbasis mit einer Ganzzahl definiert wird, folgen die Ziffern den folgenden Regeln:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
#
und dem Wert für die Ziffer bestehen (die Länge der Zeichenfolge hängt vom größten Ziffernwert ab). Zusätzlich zur Definition der Zahlenbasis mithilfe einer Ganzzahl ist es auch möglich, die Zahlenbasis mithilfe einer Zeichenfolge zu definieren. Jedes Zeichen in der Zeichenfolge stellt eine Ziffer dar und die Position jedes Zeichens stellt seinen Wert dar. Die Basis 16 könnte beispielsweise als 0123456789ABCDEF
definiert werden. Durch die Definition von Zahlenbasen ist es auch einfacher, in einem bestimmten Fall resultierende Zahlen zu erhalten. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 101100011101 ' , ' 01 ' , 16 ) . PHP_EOL ; // outputs: B1D
echo BaseConverter:: baseConvert ( ' 101100011101 ' , 2 , ' 0123456789abcdef ' ); // outputs: b1d
Es gibt auch eine dritte Möglichkeit, die Zahlenbasen mithilfe eines Arrays zu definieren. Dies ermöglicht eine noch stärkere Anpassung der Zahlenbasen. Jeder Wert im Array stellt eine Ziffer dar und der Index gibt den Wert an. Zum Beispiel:
<?php
require ' src/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 22 ' , 10 , [ ' nil ' , ' one ' ]) . PHP_EOL ; // outputs: oneniloneonenil
echo BaseConverter:: baseConvert ( ' 187556 ' , 10 , [ ' - ' , ' -! ' , ' -" ' , ' -# ' , ' -¤ ' , ' -% ' ]); // outputs: -¤---¤-!-%-"
Diese Bibliothek unterliegt dem Copyright (c) 2013-2017 Riikka Kalliomäki.
Lizenz- und Kopierinformationen finden Sie unter LIZENZ.