将大4字节整数写为无符号二进制

can*_*nni 5 php serialization binary-data

我有值在值之间浮动的整数:4000000000-4294967000(对于4字节无符号整数int,它小于int max)

我想将其保存到文件,然后重新读取值

$f = fopen($fileName, 'wb'); fwrite($f, pack('I', $value));
Run Code Online (Sandbox Code Playgroud)

重要的是,在文件中,值必须是精确的4字节无符号整数,因为外部设备会期望数据格式.但PHP将大值存储为float,并销毁二进制表示.

我怎么能用那种格式写那些数字?

[编辑] @FractalizeR thx这项工作我有:

protected static function handleUint($direction, $value)
{
    if($direction == 'encode')
    {
        $first2bytes    = intval($value / (256 * 256));
        $second2bytes   = intval($value - $first2bytes);

        return pack('n2', $first2bytes, $second2bytes);
    }
    else
    {
        $arr = unpack('n2ints', $value);
        $value = $arr['ints1'] * (256 * 256) + intval($arr['ints2']) - 1;
        return $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不太明白,为什么我必须-1返回值,这个二进制文件将生成正确吗?

Vla*_*sny 1

好吧,将 4 字节数字拆分为 2 个 2 字节数字(整数除以 256*256 以获得第一个字,然后从原始值中减去该值以获得第二个字)并写入两个包。