mam całkowitymi która płynie pomiędzy wartościami: 4000000000-4294967000 (co jest mniej niż int max dla 4 bajtów unsigned int)Napisz duży 4 bajtów jako liczbę całkowitą bez znaku, binarny
i chcę zapisać go do pliku , a następnie ponownie odczytać wartość
$f = fopen($fileName, 'wb'); fwrite($f, pack('I', $value));
istotne jest to, że w pliku, wartość musi być dokładna 4 bajt unsigned int, ponieważ urządzenia zewnętrzne będą oczekiwać, że format danych. Ale PHP przechowuje te duże wartości jako float i niszczy binarną reprezentację.
Jak mogę zapisać te liczby do pliku w tym formacie?
[EDIT] @FractalizeR thx działa to mam:
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;
}
}
ale dont bardzo rozumiem, dlaczego muszę -1 wartości powracającego, i jest to binarny zostanie wyprodukowany poprawne ?
Hej, thx :) Można sprawdzić, czy moja implementacja pracuje prawidłowe? – canni