запись бинарных данных php

Discussion in 'PHP' started by mr.celt, 7 Oct 2008.

  1. mr.celt

    mr.celt Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    133
    Likes Received:
    16
    Reputations:
    12
    Стоит задача слопатить бинарный файл с помощью php. Научился запихивать по одному байту, типа так
    "fwrite($fh,pack("c", $value))", а как записать например число 150 в 3 байта?
     
  2. [Raz0r]

    [Raz0r] Elder - Старейшина

    Joined:
    25 Feb 2007
    Messages:
    425
    Likes Received:
    484
    Reputations:
    295
    150 - это 1 байт, чтобы получить три байта нужно прибавить еще два нулл байта:
    pack("cxx", 150);
     
  3. mr.celt

    mr.celt Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    133
    Likes Received:
    16
    Reputations:
    12
    здорово,) теперь почти все ясно, как я понимаю 100000 занимает 3 байта, а вот как его записать ровно в 3 байта, когда использую pack("f", 100000); выделяется 4.
     
  4. mr.celt

    mr.celt Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    133
    Likes Received:
    16
    Reputations:
    12
    Все дальше сам разобрался, сделал вот так

    if (0 <= $size && $size < 256) fwrite($fh,pack("xxc", $size));
    elseif (256 <= $size && $size < 65536) fwrite($fh,pack("xn", $size));
    else
    {
    $pref = $size % 65536;
    $main = ($size - $pref) / 65536;
    fwrite($fh,pack("c", $main));
    if (0 <= $pref && $pref < 256) fwrite($fh,pack("xc", $pref));
    elseif (256 <= $pref && $pref < 65536) fwrite($fh,pack("n", $pref));
    }
     
Loading...