Определить неизвестный формат данных двоичных данных в PHP - PullRequest
0 голосов
/ 28 августа 2010

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

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

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);
}

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

1 Ответ

1 голос
/ 28 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...