2010-08-28 4 views
0

У меня есть двоичные данные с комбинацией строк uint32 и нулевых завершенных строк. Я знаю размер отдельного набора данных (каждый набор данных имеет тот же формат), но не фактический формат.Определить неизвестный формат данных двоичных данных в PHP

Я использую распаковывать читать данные со следующими функциями:

function read_uint32($fh){ 
    $return_value = fread($fh, 4); 
    $return_value = unpack('L', $return_value); 
    return $return_value[1]; 
} 

function read_string($fh){ 
    do{ 
    $char = fread($fh, 1); 
    $return_string .= $char; 
    }while(ord($char) != 0); 
    return substr($return_string, 0, -1); 
} 

, а затем в основном пытается обе функции и, видя, если данные имеет смысл в виде строки, и если бы не это, вероятно, ИНТ , есть ли более простой способ сделать это?

Спасибо.

ответ

1

хорошо, я думаю, ваш одобрительный вариант в порядке. Хорошо, если вы получаете только строки ascii, это довольно легко, так как самый высокий бит всегда будет 0 или 1 (в некоторых странных случаях ...), анализируя некоторые байты из файла, а затем посмотрите на дистрибутив, скажет вам, возможно ли, что его ascii или что-то двоичное. , если у вас есть другая кодировка, такая как utf8 или что-то такое, что это действительно боль в заднице. вы могли бы найти повторяющиеся символы CR/LF или отфильтровать рейд 0-31, чтобы позволить tab, cr, lf, ff slip trhough. когда вы анализируете первые X байтов и сравниваете отношение символов non tab, cr, lf, ff и других. это будет работать для любой кодировки, так как диапазон ascii нормирован ... , чтобы определить фактический тип файла, вероятно, лучше всего это сделать на уровне os и просто вызвать файл из оболочки или использовать функции php для получения типа mimetype ...