Интерпретация как 32-разрядное целое число без знака с переполнением стека

Я пытаюсь сделать небольшой инструмент 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);

0

Решение

Вы можете использовать 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'];
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]