تابع تبدیل مبنای اعداد بزرگ در php

۴ ماه پیش(به روز شده در ۳ ماه پیش) پی اچ پی(PHP)(توابع) ۰

باینری - دسیمال

باینری - دسیمال

مشخصات تصویر: ۹۷.۶۸ کیلو بایت , ۴۷۸x۴۹۷ پیکسل , jpg , Binary
جزییات تصویر:
منبع تصویر: https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2013/04/bin3.jpg

تابع معرفی شده با استناد به مطلبی از سایت Stackoverflow می باشد. تابع پیشفرض ()base_convert در php دقیقا همین کار را انجام میدهد اما برای اعداد بزرگ ناتوان هست که در مثال انتهای کد مشخص شده است. در این تابع مقدار و مبنای مورد نظر را وارد کرده و سپس به هر مبنایی که مد نظر شماست تبدیل میکند. تابع برای پردازشهای سنگین مناسب نیست چون بر مبنای رشته عمل میکند و در اجرا زمانبر هست ولی برای کارهای معمول بسیار مفید میباشد.

function my_base_convert($numstring, $frombase = 16, $tobase = 10) {
    $chars = "0123456789abcdefghijklmnopqrstuvwxyz";
    $tostring = substr($chars, 0, $tobase);
 
    $length = strlen($numstring);
    $result = '';
    for ($i = 0; $i < $length; $i++) {
        $number[$i] = strpos($chars, $numstring{$i});
    }
 
    do {
        $divide = 0;
        $newlen = 0;
        for ($i = 0; $i < $length; $i++) {
            $divide = $divide * $frombase + $number[$i];
            if ($divide >= $tobase) {
                $number[$newlen++] = (int)($divide / $tobase);
                $divide = $divide % $tobase;
            } elseif ($newlen > 0) {
                $number[$newlen++] = 0;
            }
        }
 
        $length = $newlen;
        $result = $tostring{$divide} . $result;
    } while ($newlen != 0);
 
    return $result;
}
 
// Out = 0000000000000000000000000000000000000000000000000000000000000000
echo base_convert('93126606828970615947672892964530113131806047264927526149623497787359285987082123864065558768789161850941454200', 10, 16);
 
// Out = 27a726c2bd76dfa63d812dfe4175e3788de7def0af5bc77b8c8d71938778a8dd975d744c5b05546a049cc167b778
echo my_base_convert('93126606828970615947672892964530113131806047264927526149623497787359285987082123864065558768789161850941454200', 10, 16);

البته در منبع توابع دیگری نیز معرفی شده است که بررسی آنها قطعا سودمند است.

صفحات پیشنهادی

دسترسی به مقادیر آرایه بصورت کلیدهای غیر عددی با شماره کلید(گسترش تابع array slice)...

در آرایه هایی که کلیدهای آن غیر عددی است گرفتن مقادیر آن به صورت عددی اشتباه است یعنی......

مشخص کردن کبیسه بودن سال در حالت شمسی و میلادی...

در کد زیر, تابع gLeapYear کبیسه بودن سال میلادی و sLeapYear کبیسه بودن سال شمسی را مشخص می کند. function gLeapYear($year) { if (($year % 4 == 0) and (($year % 100 != 0) or ($year % 400 == 0))) ...

تشخیص حجم فایل با استفاده از فرمت ورودی...

این تابع حجم فایل را گرفته و سپس با توجه به فرمت مشخص شده خروجی را مشخص خواهد کرد. آرگومان‌های ورودی کاملا واضح هستند اما باید گفت که مقدار precision$ قسمت اعشار خروجی را مشخص می کند که به طور پی...

محاسبه زمان اجرای یک کد(زمان‌سنج) در php...

بسیار پیش می آید تا مدت زمان اجرای یک تکه کد را بدانیم. دو تابع زیر برای حل این مسئله به کمک شما می آیند و مثال مربوطه نیز نحوه استفاده از این دو تابع را کاملا مناسب بیان نموده است. کارکرد توابع آسان ...

نظر

نظری ثبت نشده است.