Преобразование чисел

Статус
В этой теме нельзя размещать новые ответы.
A

Ahmea

Прохожие
Переделываем с другом, тут весч одну. Возникла проблема у нас небольшая. Скрипт наш через ajax маслает неслабыми массивами чисел целых туда-сюда. Посидели прикинули...не покатит на модеме. Ну мы давай думать как можно сожмякать все в пхп, а в js распаковать и наоборот.
Нашли такую весч: _http://www.compression.ru/arctest/self/ahp.htm
Но так нам и не удалось найти ее ломаную или в свободном доступе. Потом толи обкурились сигарет, толи еще чего :(, наваяли пару скриптиков. Впринципе делают они что нужно, экономия по трафу около 40% получилась, нам впринципе этого хватило.
Выложу может комунить сгодится:
Работает только с целыми числами, числа разделяли "#" и "|".
Кусок для php:
PHP:
 function alt_pow($x, $power) 
    { 
        $res = base_convert($power, 10, 2); 
        $result = $x; 
        $t = strlen($res); 
        for ($i = 1; $i < $t; $i++) 
        { 
              $digit = $res[$i]; 
              if ($digit != 0) 
                  $result = $result * $result * $x; 
              else 
                  $result = $result * $result; 
        } 
        return $result; 
    } 

function pack_s($number)
{
    $minus = false;
    if ($number[0]=="-")
    {
        $number = substr($number, 1, strlen($number)-1);
        $minus = true;
    }
    $base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
    $R = (strlen($base));
    $result = "";
    do{
        $ostatok = $number % $R;
        $number = floor($number/$R);
        $result = $base[$ostatok].$result;
    } while ($number!=0);
    
    return ($minus)? "-".$result : $result;
}

function unpack_s($text)
{
    $minus = false;
    if ($text[0]=="-")
    {
        $text = substr($text, 1, strlen($text)-1);
        $minus = true;
    }
    $base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
    $result = 0;
    $R = (strlen($base));
    do
    {
        $next = $text[0];
        $val = strpos($base, $next);
        
        if ((strlen($text)-1)!=0)
        {
$result += $val*alt_pow($R, strlen($text)-1);
        }
        else
            $result += $val;
        $text = substr($text, 1, strlen($text)-1);
    } while ($text!="");
    return ($minus)? -1*$result : $result;
}
Кусок для js:
PHP:
function pack_s(number)
{
    minus = false;
    if (number[0]=='-')
    {
        number = number.substr(1, number.length-1);
        minus = true;
    }
        
    base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
    R = base.length;
    result = "";
    do{
        ostatok = number % R;
        number = Math.floor(number/R);
        result = base[ostatok]+result;
    } while (number!=0);
    
    return (minus)? '-'+result : result;
}

function unpack_s(text)
{
    minus = false;
    if (text[0]=='-')
    {
        text = text.substr(1, text.length-1);
        minus = true;
    }
    base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
    result = 0;
    R = base.length;
    do
    {
        next = text[0];
        val = base.indexOf(next);
        
        if ((text.length-1)!=0)
            result += val*(Math.pow(R,(text.length-1)));
        else
            result += val;
        text = text.substr(1, text.length-1);
    } while (text!="");
    
    return (minus)? result*-1 : result;
}
:eek:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху