BaseConversion est une bibliothèque PHP pour convertir des bases numériques, similaire à la fonction intégrée base_convert()
de PHP. Cependant, contrairement à la fonction intégrée, cette bibliothèque n'est pas limitée par des entiers de 32 bits et est capable de convertir des nombres de précision arbitraire. Cette bibliothèque prend également en charge la conversion de fractions et permet une plus grande personnalisation en termes de bases numériques.
Afin d'optimiser la conversion de grands nombres, cette bibliothèque utilise également deux stratégies de conversion différentes. Dans certains cas, il est possible de convertir des nombres simplement en remplaçant les chiffres par des chiffres de l'autre base (par exemple lors d'une conversion de base 2 en base 16). Ceci est considérablement plus rapide que l’autre stratégie, qui calcule simplement le nouveau nombre en utilisant une arithmétique entière de précision arbitraire.
La documentation de l'API, qui peut être générée à l'aide d'Apigen, peut être consultée en ligne sur : http://kit.riimu.net/api/baseconversion/
gmp
(uniquement prise en charge IDN requise) Le moyen le plus simple d'installer cette bibliothèque consiste à utiliser Composer pour gérer vos dépendances. Afin d'installer cette bibliothèque via Composer, suivez simplement ces deux étapes :
Acquérez le composer.phar
en exécutant l’installation en ligne de commande Composer à la racine de votre projet.
Une fois que vous avez exécuté le script d'installation, vous devriez avoir le fichier composer.phar
à la racine de votre projet et vous pouvez exécuter la commande suivante :
php composer.phar require "riimu/kit-baseconversion:^1.2"
Après avoir installé cette bibliothèque via Composer, vous pouvez charger la bibliothèque en incluant le fichier vendor/autoload.php
généré par Composer lors de l'installation.
Si vous savez déjà comment utiliser Composer, vous pouvez également ajouter la bibliothèque en tant que dépendance en ajoutant le fichier composer.json
suivant à votre projet et en exécutant la commande composer install
:
{
"require" : {
"riimu/kit-baseconversion" : " ^1.2 "
}
}
Si vous ne souhaitez pas utiliser Composer pour charger la bibliothèque, vous pouvez également télécharger la bibliothèque manuellement en téléchargeant la dernière version et en extrayant le dossier src
dans votre projet. Vous pouvez ensuite inclure le fichier src/autoload.php
fourni pour charger les classes de la bibliothèque.
Le moyen le plus pratique d'utiliser cette bibliothèque consiste à utiliser la méthode statique baseConvert()
fournie par la classe BaseConverter
. Dans la plupart des cas, cela fonctionne de la même manière que base_convert()
. Par exemple:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' A37334 ' , 16 , 2 ); // outputs: 101000110111001100110100
La méthode accepte les nombres négatifs et les fractions de la même manière. Un quatrième paramètre facultatif peut être utilisé pour définir la précision de la conversion. Par exemple:
<?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
La méthode statique est simplement un wrapper pratique pour créer une instance de BaseConvert
et appeler les méthodes setPrecision()
et convert()
. Si vous devez convertir plusieurs nombres, il est plus efficace d'appeler l'objet de manière non statique. Par exemple:
<?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
Si le numéro fourni contient des chiffres invalides qui ne font pas partie de la base numérique définie, la méthode renverra false à la place.
Bien que cette bibliothèque prenne en charge la conversion de fractions, il est important de comprendre que les fractions ne peuvent pas toujours être converties avec précision d'une base numérique à une autre de la même manière que les entiers peuvent être convertis. Cela est dû au fait que toutes les fractions ne peuvent pas être représentées dans une autre base numérique.
Par exemple, disons que nous avons le nombre 0,1 en base 3. Cela équivaut à 1/3 en base 10. Cependant, si vous représentiez 1/3 sous forme de nombre décimal, vous obtiendriez un « 0,3333 » répétitif à l’infini. ..'. Par exemple:
<?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
Grâce à ce comportement, il est possible de définir la précision utilisée pour les conversions de fractions inexactes. Comme on peut le voir dans l'exemple précédent, la valeur de précision définit le nombre maximum de chiffres dans le nombre obtenu. Le résultat peut toutefois comporter moins de chiffres si le nombre peut être converti avec précision en utilisant un petit nombre de chiffres. La précision peut également être complètement ignorée si le convertisseur sait qu'il peut convertir les fractions avec précision.
La valeur de précision a également une définition alternative. Si la précision est 0 ou un nombre négatif, alors le nombre maximum de chiffres dans le nombre résultant est basé sur la précision du nombre d'origine. Si la précision est 0, le nombre résultant aura autant de chiffres qu'il faut pour représenter le nombre avec la même précision que le nombre d'origine. Un nombre négatif augmentera simplement le nombre de chiffres en plus. Par exemple:
<?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
Dans l'exemple précédent, le nombre d'origine est 0.A7
en base 16. Un nombre en base 16 avec deux chiffres dans la partie fractionnaire peut représenter un nombre avec une précision de 1/(16 * 16) == 1/256
. Pour représenter la partie fractionnaire avec la même précision en base 10, nous avons besoin d'au moins 3 chiffres, car deux chiffres ne peuvent représenter que des nombres avec une précision de 1/100
.
La valeur de précision par défaut utilisée par la bibliothèque est -1
. Il est également important de noter que le dernier chiffre n’est pas arrondi (car cela entraînerait des résultats incohérents dans certains cas).
Afin de rendre l'interaction de l'utilisateur avec la bibliothèque plus pratique, la bibliothèque traite tous les nombres sans tenir compte de la casse, à moins que la base de numéros ne l'interdise. Par exemple, la base 16 peut être traitée sans tenir compte de la casse, car elle définit uniquement la valeur des chiffres 0-9A-F
. Cependant, la base 62 ne peut pas être traitée sans tenir compte de la casse, car des lettres comme A
et a
ont une valeur différente.
Les nombres renvoyés respecteront toujours la casse des caractères définie par la base numérique. Par exemple:
<?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
L'une des fonctionnalités de cette bibliothèque est qu'elle permet une bien meilleure personnalisation des bases numériques que base_convert()
. Dans la plupart des cas, vous définirez probablement la base numérique à l'aide d'un simple entier tel que 10
ou 16
. Cependant, il n’y a aucune limite à la taille de cet entier. Par exemple:
<?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
Cependant, pour les grandes bases numériques, les chiffres sont simplement représentés par une chaîne composée de #
et de la valeur du chiffre. Chaque fois que la base numérique est définie à l'aide d'un nombre entier, les chiffres suivent les règles suivantes :
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
#
et de la valeur du chiffre (la longueur de la chaîne dépend de la plus grande valeur du chiffre). En plus de définir la base numérique à l'aide d'un nombre entier, il est également possible de définir la base numérique à l'aide d'une chaîne. Chaque caractère de la chaîne représente un chiffre et la position de chaque caractère représente sa valeur. La base 16, par exemple, pourrait être définie comme 0123456789ABCDEF
. Définir les bases numériques de cette manière facilite également l’obtention des nombres résultants dans un cas spécifique. Par exemple:
<?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
Il existe également une troisième façon de définir les bases numériques à l’aide d’un tableau. Cela permet une personnalisation encore plus grande en termes de bases numériques. Chaque valeur du tableau représente un chiffre et l'index indique la valeur. Par exemple:
<?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: -¤---¤-!-%-"
Cette bibliothèque est protégée par Copyright (c) 2013-2017 Riikka Kalliomäki.
Voir LICENCE pour les informations sur la licence et la copie.