BaseConversion هي مكتبة PHP لتحويل قواعد الأرقام، تشبه وظيفة PHP المضمنة base_convert()
. ومع ذلك، على عكس الوظيفة المضمنة، فإن هذه المكتبة ليست محدودة بأعداد صحيحة 32 بت وهي قادرة على تحويل أرقام ذات دقة عشوائية. تدعم هذه المكتبة أيضًا تحويل الكسور وتسمح بمزيد من التخصيص فيما يتعلق بقواعد الأرقام.
من أجل تحسين تحويل الأعداد الكبيرة، تستخدم هذه المكتبة أيضًا استراتيجيتين مختلفتين للتحويل. في بعض الحالات، من الممكن تحويل الأرقام ببساطة عن طريق استبدال الأرقام بأرقام من الأساس الآخر (على سبيل المثال، عند التحويل من الأساس 2 إلى الأساس 16). وهذا أسرع بكثير من الإستراتيجية الأخرى، والتي تقوم ببساطة بحساب الرقم الجديد باستخدام حساب عدد صحيح دقيق.
يمكن قراءة وثائق واجهة برمجة التطبيقات (API)، التي يمكن إنشاؤها باستخدام Apigen، عبر الإنترنت على: http://kit.riimu.net/api/baseconversion/
gmp
(دعم IDN المطلوب فقط) أسهل طريقة لتثبيت هذه المكتبة هي استخدام Composer للتعامل مع تبعياتك. لتثبيت هذه المكتبة عبر Composer، ما عليك سوى اتباع الخطوتين التاليتين:
احصل على composer.phar
عن طريق تشغيل تثبيت سطر أوامر Composer في جذر مشروعك.
بمجرد تشغيل البرنامج النصي للتثبيت، يجب أن يكون لديك ملف composer.phar
في جذر المشروع الخاص بك ويمكنك تشغيل الأمر التالي:
php composer.phar require "riimu/kit-baseconversion:^1.2"
بعد تثبيت هذه المكتبة عبر Composer، يمكنك تحميل المكتبة عن طريق تضمين ملف vendor/autoload.php
الذي تم إنشاؤه بواسطة Composer أثناء التثبيت.
إذا كنت على دراية بكيفية استخدام Composer، فيمكنك بدلاً من ذلك إضافة المكتبة باعتبارها تبعية عن طريق إضافة ملف composer.json
التالي إلى مشروعك وتشغيل أمر composer install
:
{
"require" : {
"riimu/kit-baseconversion" : " ^1.2 "
}
}
إذا كنت لا ترغب في استخدام Composer لتحميل المكتبة، فيمكنك أيضًا تنزيل المكتبة يدويًا عن طريق تنزيل أحدث إصدار واستخراج المجلد src
إلى مشروعك. يمكنك بعد ذلك تضمين ملف src/autoload.php
المتوفر لتحميل فئات المكتبة.
الطريقة الأكثر ملاءمة لاستخدام هذه المكتبة هي عبر الطريقة الثابتة baseConvert()
التي توفرها فئة BaseConverter
. في معظم الحالات، يعمل بنفس الطريقة التي يعمل بها base_convert()
. على سبيل المثال:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' A37334 ' , 16 , 2 ); // outputs: 101000110111001100110100
تقبل الطريقة الأعداد السالبة والكسور بنفس الطريقة. يمكن استخدام معلمة رابعة اختيارية لتحديد دقة التحويل. على سبيل المثال:
<?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
إذا كان الرقم المقدم يحتوي على أرقام غير صالحة ليست جزءًا من قاعدة الأرقام المحددة، فستعيد الطريقة خطأ بدلاً من ذلك.
على الرغم من أن هذه المكتبة تدعم تحويل الكسور، فمن المهم أن نفهم أنه لا يمكن دائمًا تحويل الكسور بدقة من قاعدة أرقام إلى أخرى بنفس الطريقة التي يمكن بها تحويل الأعداد الصحيحة. هذا نتيجة لحقيقة أنه لا يمكن تمثيل جميع الكسور بقاعدة أرقام أخرى.
على سبيل المثال، لنفترض أن لدينا الرقم 0.1 في الأساس 3. وهذا يساوي نفس 1/3 في الأساس 10. ومع ذلك، إذا كنت تريد تمثيل 1/3 كرقم عشري، فستحصل على رقم متكرر بلا حدود '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
في المثال السابق، الرقم الأصلي هو 0.A7
في الأساس 16. يمكن أن يمثل الرقم الأساسي 16 المكون من رقمين في الجزء الكسري رقمًا يصل إلى دقة 1/(16 * 16) == 1/256
. لتمثيل الجزء الكسري بنفس الدقة في الأساس 10، نحتاج إلى 3 أرقام على الأقل، لأن الرقمين يمكن أن يمثلا فقط أرقامًا تصل إلى دقة 1/100
.
قيمة الدقة الافتراضية التي تستخدمها المكتبة هي -1
. من المهم أيضًا ملاحظة أن الرقم الأخير لم يتم تقريبه (نظرًا لأنه قد يؤدي إلى نتائج غير متناسقة في بعض الحالات).
من أجل جعل تفاعل المستخدم مع المكتبة أكثر ملاءمة، تتعامل المكتبة مع جميع الأرقام بطريقة غير حساسة لحالة الأحرف، ما لم تحظر قاعدة الأرقام ذلك. على سبيل المثال، يمكن التعامل مع الأساس 16 بطريقة غير حساسة لحالة الأحرف، لأنه يحدد فقط قيمة الأرقام 0-9A-F
. ومع ذلك، لا يمكن التعامل مع الأساس 62 بطريقة غير حساسة لحالة الأحرف، لأن الحروف مثل A
و a
لها قيمة مختلفة.
ستحترم الأرقام التي يتم إرجاعها دائمًا حالة الأحرف المحددة بواسطة قاعدة الأرقام. على سبيل المثال:
<?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
إحدى ميزات هذه المكتبة هي أنها تسمح بتخصيص قواعد الأرقام بشكل أفضل بكثير من 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
هناك أيضًا طريقة ثالثة لتحديد قواعد الأرقام باستخدام المصفوفة. وهذا يسمح بتخصيص أكبر من حيث قواعد الأرقام. تمثل كل قيمة في المصفوفة رقمًا ويشير الفهرس إلى القيمة. على سبيل المثال:
<?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: -¤---¤-!-%-"
حقوق الطبع والنشر لهذه المكتبة (c) 2013-2017 محفوظة لـ Riikka Kalliomäki.
راجع الترخيص للحصول على معلومات الترخيص والنسخ.