Мне нужно извлечь некоторые данные из двоичного файла. данные начинаются с шестнадцатеричного маркера. Сначала я должен найти этот маркер, а затем извлечь x-байты.
PHP хорош для манипулирования текстовыми файлами.
У кого-то есть хорошая идея сделать это с помощью двоичных данных?
Благодаря !
Вам не нужны специальные функции, такие как pack или unpack и т. Д., Хотя пакет может быть полезен для указания иглы для поиска. php не применяет кодировку символов к строкам, она оставляет их как есть, поэтому по умолчанию она двоичная.
$hexMarker = 0x70000000;// or whatever $binaryData = file_get_contents($filename); $x = 5; $pos = strpos($binaryData, $hexMarker); if ($pos !== false) { $start = $pos + strlen($hexMarker); echo substr($binaryData, $start, $x); }
вы можете использовать fopen и fread в итеративном режиме, если размер файла большой, так как file_get_contents будут потреблять много памяти в этом случае. Но это отдельный вопрос.
Вы должны посмотреть на функции unpack () и pack () .
Вот пример, который читает весь файл в буфер и использует unpack()
для получения значений двух первых символов:
$fp = fopen("binary.txt", "r"); fseek($fp, 0, SEEK_END); $fs = ftell($fp); fseek($fp, 0, SEEK_SET); $binary = fread($fp, $fs); fclose($fp); $unpacked = unpack("c2", $binary);