Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Парсинг биткода


Автор: TUMS 16.3.2008, 03:04
Доброго всем времени суток.
Хотел бы попросить помочь с оптимизацией функции для парсинга биткода.
Допустим есть ряд чисел вида 2^0, 2^1, 2^2, 2^n (такие числа и есть биткоды). Есть ещё одно число, которое содержит в себе сумму таких чисел, допустим 522 = 512 + 8 + 2.
Задача: разобрать число N на биткоды.

Моё решение меня лично не очень устраивает:
Код

// Input: int $bitcode , число для обработки
// Output: array $s , массив из чисел вида 2^n
function parse_bitcode($bitcode) {
    $trans = array("0" => "0 ", "1" => "1 ");
    $s = explode(" ", strrev(rtrim(strtr(decbin($bitcode), $trans))));
    for ($i = 0; $i <= count($s); $i++) {
        if ($s[$i] == "1") {
                $s[$i] = pow(2, $i);
            }
            else {
                unset($s[$i]);
            }
    }
    return $s;
}


Вопрос: можно ли решить задачу проще?

Заранее благодарю.

Автор: Fortop 16.3.2008, 04:14
Код

function sbit($bc) {
    $s = array();
    $bin = decbin($bc);
    $maxExp = strlen($bin);
    for ($i = 0; $i < $maxExp; $i++) {
        if (substr($bin, $i, 1) == '1') {
            $s[$maxExp - $i - 1] = pow(2, $maxExp - $i - 1);
        }
    }
    return $s;
}


Код

function abit($bc) {
    $i=0;
    $s = array();
    while ($bc > 0) {
        $bc % 2 ? $s[$i] = pow(2, $i):0;
        $bc = (int)$bc / 2;
        $i++;
    }
    return $s;
}

Автор: TUMS 16.3.2008, 04:17
Огромное спасибо =)
Вы мне очень помогли =)

*Низко кланяется*

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)