Почему нельзя сжать много операторов распаковки в одну как форму распаковки (& lt; Lfffffff & quot;, $ bytes)?

<?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.

введите описание изображения здесь

0

Решение

От распаковать документ:

Распакованные данные хранятся в ассоциативном массиве. Для достижения
это вы должны назвать разные коды формата и разделить их
косая черта /. Если присутствует аргумент повторителя, то каждый массив
Ключи будут иметь порядковый номер за данным именем.

Попробуйте этот пример:

<?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));
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector