Я пытаюсь сделать небольшой инструмент PHP для World of Tanks, который будет читать боевые повторы.
Ты можешь видеть там из чего состоит каждый повтор и там это пример.
К сожалению, я не понимаю эту часть вики-статьи:
Прочитайте 4 байта и интерпретируйте их как 32-разрядное целое число без знака, пусть это будет «количество блоков»
Я пытался преобразовать их Java-код в PHP, но он все время выдает «0».
Также я попробовал код, найденный на php.net/manual/en/language.types.integer.php#38478, но он также выводит «0».
Вот мой текущий код:
function parse($string)
{
$x = (float)$string;
if ($x > (float)2147483647)
$x -= (float)"4294967296";
return (int)$x;
}
$replay = file_get_contents('steppes.txt');
$magic = substr($replay, 0, 4);
$count = substr($replay, 4, 4);
echo $magic." -- ".parse($magic)."<br>".$count." -- ".parse($count);
Вы можете использовать PHP-функцию распаковывать конвертировать двоичные данные.
В вашем случае вы должны использовать код V
для чего
длинный без знака (всегда 32-битный, байтовый порядок с прямым порядком байтов)
(long — это имя, используемое для 32-битного целого числа). Вы не указали используемый порядок следования байтов, но, глядя на ваши демо-данные, я предполагаю, что они немного порядковые. Список всех «кодов» см. В документации к пак-функция.
$replay = file_get_contents('steppes.txt');
$info = unpack('Vmagic/Vcount', $replay);
echo 'Magic: ' . $info['magic'];
echo '<br/>';
echo 'Count: ' . $info['count'];
Других решений пока нет …