<?php
//it is unnecessary to get the data file.
$handle = fopen('data', 'rb');
fread($handle,"64");
//it is no use to parse the first 64 bytes here.
$bytes= fread($handle,"4");
print_r(unpack("L",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
$bytes= fread($handle,"4");
print_r(unpack("f",$bytes));
echo "<br/>";
?>
Я получил правильный вывод с кодом.
Array ( [1] => 20150416 )
Array ( [1] => 1.0499999523163 )
Array ( [1] => 1.25 )
Array ( [1] => 1.0299999713898 )
Array ( [1] => 1.1900000572205 )
Array ( [1] => 509427008 )
Array ( [1] => 566125248 )
Array ( [1] => 509427008 )
Теперь я хочу сжать много операторов распаковки в одну форму unpack("Lfffffff",$bytes)
со следующим кодом.
<?php
$handle = fopen('data', 'rb');
fread($handle,"64");
//it is no use to parse the first 64 bytes here.
$bytes= fread($handle,"32");
print_r(unpack("Lfffffff",$bytes));
?>
Почему я получаю только один вывод, никаких других проанализированных данных в моем результате? Как это исправить?
Array ( [fffffff] => 20150416 )
Файл данных был открыт с помощью notepad ++ и проверен плагином — TextFX.
Здесь анализируется только 96 байтов, первые 64 байта опущены символом fread.
Распакованные данные хранятся в ассоциативном массиве. Для достижения
это вы должны назвать разные коды формата и разделить их
косая черта /. Если присутствует аргумент повторителя, то каждый массив
Ключи будут иметь порядковый номер за данным именем.
Попробуйте этот пример:
<?php
$array = array (20150416, 1.0499999523163, 1.25, 1.0299999713898, 1.1900000572205, 509427008, 566125248, 509427008);
$output = pack('L', $array[0]);
for($i = 1; $i < 8; $i++) {
$output .= pack('f', $array[$i]);
}
print_r(unpack("LL/f7", $output));
?>
В unpack("LL/f7", $output)
первый L
относится к без знака долго второй L
к индексу в массиве (см. первый элемент в выводе) /
(прочитайте первую часть ответа) и f
относится к поплавок и 7
до семи значений с плавающей запятой.
Выход:
Array
(
[L] => 20150416
[1] => 1.0499999523163
[2] => 1.25
[3] => 1.0299999713898
[4] => 1.1900000572205
[5] => 509427008
[6] => 566125248
[7] => 509427008
)
В вашем случае должно быть:
<?php
$handle = fopen('data', 'rb');
$bytes= fread($handle,"32");
print_r(unpack("LL/f7",$bytes));
?>
Других решений пока нет …