Автор Тема: Алгоритъм от Python в PHP.  (Прочетена 3279 пъти)

bohosh

  • Новаци
  • *
  • Публикации: 2
    • Профил
Алгоритъм от Python в PHP.
« -: Feb 23, 2014, 10:53 »
Нуждая се от човек с познания от Python и PHP за да можем един алгоритъм да го направим от Python в php. Става въпрос за алгоритъм за смятане на 16 битова чексума.
За желаещите да помогнат или предложат оферта, моля пишете тук или на лично.

Благодаря.

def readn(fin, n):
s = 0
for ti in fin.read(n):
s = s * 256 + ord(ti)
return s

def fletcher(fin, k):
if k not in (16, 32, 64):
raise ValueError("Valid choices of k are 16, 32 and 64")
nbytes = k // 16
mod = 2 ** (8 * nbytes) - 1
s = s2 = 0
t = readn(fin, nbytes)
while t:
s += t
s2 += s
t = readn(fin, nbytes)
return s % mod + (mod + 1) * (s2 % mod)
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Алгоритъм от Python в PHP.
« Отговор #1 -: Feb 23, 2014, 11:56 »
Код:
debian:/tmp# cat a.py
def readn(fin, n):
    s = 0
    for ti in fin.read(n):
        s = s * 256 + ord(ti)
    return s

def fletcher(fin, k):
    if k not in (16, 32, 64):
        raise ValueError("Valid choices of k are 16, 32 and 64")
    nbytes = k // 16
    mod = 2 ** (8 * nbytes) - 1
    s = s2 = 0
    t = readn(fin, nbytes)
    while t:
        s += t
        s2 += s
        t = readn(fin, nbytes)
    return s % mod + (mod + 1) * (s2 % mod)

def main():
    fin = open("/tmp/a.py","r")
    print fletcher(fin,16)

if __name__ == "__main__":
    main()
debian:/tmp# python a.py
55692
debian:/tmp# cat a.php
<?php

function readn($fin,$n)
{
    $s = 0;
    $arr = fread($fin,$n);
    if (!strlen($arr)) return 0;
    for ($a=0;$a<$n;$a++)
    {
        $s = ($s << 8) + ord($arr[$a]);
    }
    return $s;
}

function fletcher($fin,$k)
{
    if (($k!=16) && ($k!=32) && ($k!=64)) die("Valid choices of k are 16/32/64");
    $nbytes = floor($k/16);
    $mod = (1 << ($nbytes<<3)) -1;
    $s = $s2 = 0;
    $t = readn($fin,$nbytes);
    while ($t)
    {
        $s+=$t;
        $s2+=$s;
        $t = readn($fin,$nbytes);
    }
    return $s % $mod + ($mod+1)*($s2%$mod);
}

$fin = fopen("/tmp/a.py","r");
echo fletcher($fin,16);
?>

debian:/tmp# php a.php
55692

Не ща пари, бири, кафета и тем подобни. Искам да разбера защо точно fletcher за чексуми на файлове.
Активен

"Knowledge is power" - France is Bacon

bohosh

  • Новаци
  • *
  • Публикации: 2
    • Профил
Re: Алгоритъм от Python в PHP.
« Отговор #2 -: Feb 23, 2014, 14:56 »
След като ми дадоха грешна информация...темата доста се промени!!!
Ако някой има идея от смятане на чексуми в HEX файлове, нека пише.
Благодаря.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Алгоритъм от Python в PHP.
« Отговор #3 -: Feb 23, 2014, 18:45 »
Защо не пробваш със стандартната CRC функция в PHP? Ако е защото fletcher е по-бърз, то имай предвид че точно тази имплементация е отвратително бавна, защото ще чете по 2/4 или 8 байта от файла. Ще трябва да я оптимизираш като четеш по-големи блокове от файла и ги буферираш. Трябва да има някакво предимство в конкретния случай, което да оправдае заниманието, та ми страна интересно.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Python IDE
Настройка на програми
gamehack 1 3975 Последна публикация May 23, 2003, 12:03
от rat
Пакетиране на python скрипт
Общ форум
pink 0 2916 Последна публикация Jul 12, 2007, 15:34
от pink
Python 3.1.2
Настройка на програми
fatalerrorbg 10 4988 Последна публикация Aug 30, 2010, 14:39
от bop_bop_mara
Проблем с Python
Настройка на програми
f1r3fl3x 4 3828 Последна публикация Jun 23, 2011, 22:25
от f1r3fl3x
Искам да се зарежда python 3.7 вместо python 2.7
Web development
3p0 36 17848 Последна публикация Dec 27, 2019, 00:49
от 4096bits