hexdec(bin2hex())

haxyn

Новичок
Добрый день,

Сразу оговорюсь, что некогда раньше с бинарниками не работал поэтому буду рад любому
"посылу" на дельную статью по этой теме.

Такой вопрос:
Читаю два байта из бинарника в которых содержится информация о размере следующего куска.
т.е. надо эти самых два байта перевести в десятичную чтоб понять сколько читать дальше.
функция bindec() принимает только строки и возвращает 0 если пытаюсь скормить бинар,
а вот функция bin2hex() конвертирует всё подряд, вот и пришлось так выкрутится:
PHP:
$size = hexdec(bin2hex(fread($handle, 2)));
Но чувствую что это не "кашерный" метод и я просто чего то не знаю...
 

haxyn

Новичок
Спасибо, то что надо!

Я уже натыкался на эту функцию на php.net, но не мог понять как она работает.
Теперь нашел внятный пример и понял насколько это удобно:
http://www.codediesel.com/php/unpacking-binary-data/

Если бы на php.net такой кусок отписали в примерах то всё сразу было бы понятно :
PHP:
    $header_format = 
            'A6Version/' . # Get the first 6 bytes
            'C2Width/' .   # Get the next 2 bytes
            'C2Height/' .  # Get the next 2 bytes
            'C1Flag/' .    # Get the next 1 byte
            '@11/' .       # Jump to the 12th byte
            'C1Aspect';    # Get the next 1 byte
 

haxyn

Новичок
не хочется новую тему открывать...

Есть два байта которые надо представить в двоичной и проанализировать по шаблону:
Octet Aligned: "scpaattttttttttt"B (16 bits)

Таких пар сотни, а потому написал под это дело функцию которая обрабатывает строку нулей и единиц длинной 16 знаков.

Читаю 2 байта unpack'ом с параметром n и потом это десятичное в двоичную intval'ом перевожу
только например 101F это 1000000011111 т.е. 13, а не 16 знаков
самым простым способом это исправить мне показалось приписка в начало строки нулей for'ом

может есть способ по лучше, через регулярные или еще как?
 

haxyn

Новичок
Спасибо, то что надо!

Вот видишь один вопрос один ответ, зачем из-за таких мелочей новую тему открывать)))
 

Вурдалак

Продвинутый новичок
Чтобы другим было легче найти подходящую тему, а не искать в одной теме с кучей мусора. Ты поступил эгоистично, ничего смешного тут нет.
 
Сверху