解释为带 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'];
我正在尝试为坦克世界制作一个小 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'];