解释为带 PHP 的无符号 32 位整数

Interpreting as unsigned 32 bit integer with PHP

我正在尝试为坦克世界制作一个小 PHP 工具来读取战斗回放。 你可以看到there what each replay consists of and there是一个例子。

很遗憾,我不明白维基文章的这一部分:

Read 4 bytes, and interpret these as an unsigned 32 bit integer, let this be "block count"

我试图将他们的 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函数unpack来转换二进制数据。

在您的情况下,您应该使用 V 代码

unsigned long (always 32 bit, little endian byte order)

(long 是用于 32 位整数的名称)。您没有指定使用的字节顺序,但查看您的演示数据我认为它是小端。有关所有 'codes' 的列表,请参阅 pack-function.

的文档
$replay = file_get_contents('steppes.txt');
$info = unpack('Vmagic/Vcount', $replay);
echo 'Magic: ' . $info['magic'];
echo '<br/>';
echo 'Count: ' . $info['count'];