У меня есть целые числа, которые плавают между значениями: 4000000000-4294967000 (что меньше, чем int max для 4-байтового целого без знака)
, и я хочу сохранить его в файл, а затем перечитать значение
$f = fopen($fileName, 'wb'); fwrite($f, pack('I', $value));
Важно, чтобы в файле значение было точно 4-байтовым беззнаковым целым, потому что внешние устройства ожидают такой формат данных.Но PHP хранит эти большие значения как float и уничтожает двоичное представление.
Как я могу записать эти числа в файл в этом формате?
[EDIT] @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;
}
}
Но я не совсем понимаю, почему мне нужно -1 на возвращаемое значение, и будет ли этот двоичный файл будет получен правильно?