BaseConversionは、PHP の組み込み関数base_convert()
に似た、基数を変換するための PHP ライブラリです。ただし、組み込み関数とは異なり、このライブラリは 32 ビット整数に制限されず、任意の精度の数値を変換できます。このライブラリは分数の変換もサポートしており、基数に関してさらにカスタマイズすることができます。
大きな数値の変換を最適化するために、このライブラリは 2 つの異なる変換戦略も採用しています。場合によっては、数字を他の基数の数字に置き換えるだけで数値を変換できることがあります (例: 2 進数から 16 進数に変換する場合)。これは、任意精度の整数演算を使用して新しい数値を単純に計算する他の戦略よりも大幅に高速です。
API ドキュメントは Apigen を使用して生成でき、http://kit.riimu.net/api/baseconversion/ でオンラインで読むことができます。
gmp
(必要な IDN サポートのみ) このライブラリをインストールする最も簡単な方法は、Composer を使用して依存関係を処理することです。 Composer 経由でこのライブラリをインストールするには、次の 2 つの手順に従ってください。
プロジェクト ルートで Composer コマンドライン インストールを実行して、 composer.phar
を取得します。
インストール スクリプトを実行すると、 composer.phar
ファイルがプロジェクト ルートに存在し、次のコマンドを実行できるようになります。
php composer.phar require "riimu/kit-baseconversion:^1.2"
Composer 経由でこのライブラリをインストールした後、インストール中に Composer によって生成されたvendor/autoload.php
ファイルを含めることでライブラリをロードできます。
Composer の使用方法にすでに慣れている場合は、次のcomposer.json
ファイルをプロジェクトに追加し、 composer install
コマンドを実行することで、ライブラリを依存関係として追加することもできます。
{
"require" : {
"riimu/kit-baseconversion" : " ^1.2 "
}
}
Composer を使用してライブラリをロードしたくない場合は、最新リリースをダウンロードし、 src
フォルダーをプロジェクトに抽出することで、ライブラリを手動でダウンロードすることもできます。次に、提供されたsrc/autoload.php
ファイルをインクルードして、ライブラリ クラスをロードできます。
このライブラリを使用する最も便利な方法は、 BaseConverter
クラスによって提供される静的メソッドのbaseConvert()
を使用することです。ほとんどの場合、 base_convert()
と同じように機能します。例えば:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' A37334 ' , 16 , 2 ); // outputs: 101000110111001100110100
このメソッドは、負の数と分数を同様に受け入れます。オプションの 4 番目のパラメーターを使用して、変換の精度を定義できます。例えば:
<?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
静的メソッドは、 BaseConvert
のインスタンスを作成し、 setPrecision()
メソッドとconvert()
メソッドを呼び出すための単なる便利なラッパーです。複数の数値を変換する必要がある場合は、非静的な方法でオブジェクトを呼び出す方が効率的です。例えば:
<?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
指定された数値に、定義された基数の一部ではない無効な数字が含まれている場合、メソッドは代わりに false を返します。
このライブラリは分数の変換をサポートしていますが、分数は整数の変換と同じ方法で常に正確に基数から別の基数に変換できるわけではないことを理解することが重要です。これは、すべての分数を別の基数で表現できるわけではないという事実の結果です。
たとえば、基数 3 の数値 0.1 があるとします。これは、基数 10 の 1/3 と同じです。ただし、1/3 を 10 進数で表すと、無限に繰り返される「0.3333」が得られます。 ..'。例えば:
<?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
この動作により、不正確な分数変換に使用される精度を設定することができます。前の例でわかるように、精度の値は、結果の数値の最大桁数を定義します。ただし、少数の桁を使用して数値を正確に変換できる場合は、結果の桁数が少なくなることがあります。コンバーターが分数を正確に変換できることを知っている場合、精度は完全に無視される場合もあります。
精度の値には別の定義もあります。精度が 0 または負の数値の場合、結果の数値の最大桁数は元の数値の精度に基づきます。精度が 0 の場合、結果の数値は、元の数値と同じ精度で数値を表すのに必要な桁数になります。負の数値を指定すると、それに加えて桁数が増えるだけです。例えば:
<?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
前の例では、元の数値は 16 進数の0.A7
です。小数部に 2 桁の 16 進数の数値は1/(16 * 16) == 1/256
の精度まで数値を表すことができます。 2 桁では1/100
の精度までしか数値を表現できないため、小数部を同じ精度で 10 を底として表すには、少なくとも 3 桁が必要です。
ライブラリで使用されるデフォルトの精度値は-1
です。最後の桁は四捨五入されていないことに注意することも重要です (場合によっては結果に一貫性がなくなる可能性があるため)。
ユーザーによるライブラリとの対話をより便利にするために、ライブラリは、番号ベースで禁止されていない限り、すべての数値を大文字と小文字を区別しない方法で処理します。たとえば、基数 16 は、数字0-9A-F
の値のみを定義するため、大文字と小文字を区別せずに処理できます。ただし、 A
やa
などの文字は異なる値を持つため、base 62 は大文字と小文字を区別せずに処理できません。
返される数値は常に、基数で定義された大文字と小文字を尊重します。例えば:
<?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
このライブラリの機能の 1 つは、 base_convert()
よりもはるかに優れた基数のカスタマイズが可能であることです。ほとんどの場合、おそらく10
や16
などの単純な整数を使用して基数を定義します。ただし、その整数のサイズに制限はありません。例えば:
<?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
ただし、基数が大きい場合、数字は#
とその数字の値で構成される文字列によって単純に表されます。基数が整数を使用して定義されている場合、数字は次の規則に従います。
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
の数字が使用されます。ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
#
とその数字の値で構成される数字の文字列が使用されます (文字列の長さは最大の数字の値によって異なります)。整数を使用して基数を定義することに加えて、文字列を使用して基数を定義することもできます。文字列内の各文字は数字を表し、各文字の位置はその値を表します。たとえば、基数 16 は0123456789ABCDEF
と定義できます。この方法で基数を定義すると、特定のケースでの結果の数値を取得しやすくなります。例えば:
<?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
配列を使用して基数を定義する 3 番目の方法もあります。これにより、数値ベースに関してさらに高度なカスタマイズが可能になります。配列内の各値は数字を表し、インデックスは値を示します。例えば:
<?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: -¤---¤-!-%-"
このライブラリの著作権は 2013-2017 Riikka Kalliomäki にあります。
ライセンスとコピーの情報については、「ライセンス」を参照してください。