2015-04-29 1 views
0
<?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/>"; 
?> 

J'ai obtenu la bonne sortie avec le code.

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) 

Maintenant, je veux compresser plusieurs déclarations déballer dans un comme la forme de unpack("Lfffffff",$bytes) avec le code suivant. Pourquoi ai-je la seule sortie, aucune autre donnée analysée dans mon résultat? Comment le réparer?

Array ([fffffff] => 20150416) 

Le fichier de données a été ouvert avec notepad ++ et vérifié par le plugin - TextFX. Seulement 96 octets analysés ici, les 64 premiers octets omis par fread.

enter image description here

+0

pouvez-vous poster le contenu de votre dossier? –

+0

c'est un fichier binaire, s'il vous plaît dites-moi comment puis-je le coller ici? –

+0

J'ai coller le fichier de données dans le lien externe, l'administrateur fait le statut de maintien du message, maintenant je le repositionne ici et supprime le fichier de données dans le lien externe. –

Répondre

0

De l'unpack doc:

Les données décompressé sont stockées dans un tableau associatif. Pour accomplir , vous devez nommer les différents codes de format et les séparer par une barre oblique /. Si un argument de répéteur est présent, alors chacune des clés du tableau aura un numéro de séquence derrière le nom donné.

Essayez cet exemple:

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

?> 

Dans unpack("LL/f7", $output) la première L se réfère à unsigned long la deuxième L à l'index dans le tableau (voir le premier élément de la sortie) du / (lu la première partie de la réponse) et f fait référence à flotteur et le 7 à sept valeurs flottantes.

Sortie:

Array 
(
    [L] => 20150416 
    [1] => 1.0499999523163 
    [2] => 1.25 
    [3] => 1.0299999713898 
    [4] => 1.1900000572205 
    [5] => 509427008 
    [6] => 566125248 
    [7] => 509427008 
) 

Dans votre cas devrait être:

<?php 
    $handle = fopen('data', 'rb'); 
    $bytes= fread($handle,"32"); 
    print_r(unpack("LL/f7",$bytes)); 
?> 
+0

@it_is_a_literature testez-vous mon exemple? –

+0

je l'ai testé, c'est ok, je serching matériel sur le format. Dans le "LL/f7", le nombre 7 signifie que f sera 7 fois, deux problèmes subsistent. –

+0

"LL/f7", le "LL" premier L est unsigned long, qu'est-ce que le second 'L 'signifie ici? –