Voilà je dois décoder un fichier comprenant une liste de coordonnées de points, puis je voudrais après l'afficher sur un graph en php.
Pour l'affichage pas de pb je gère, simplement le décodage m'embète un peu.
Voici l'une des lignes :
æaaaa«â-ãmæ½è®è•çÓå16;å’æ~è™êïë1A;ê—ç çwè å Å É ‰ Ÿ » §
Je dois décoder cette ligne sachant qu'on me dit que ca représenterait sous la forme 32bits les valeurs 'integer' du signal.
Pourriez-vous m'indiquer comment décoder ceci?
Merci de votre aide
tout les 4 octets, t'as une valeur, la fonction ord te donne la valeur d'un octet. apres, faut voir en fonction de l'endian, mais ca donnerait un truc genre :
les 8, 16 et 24 sont peut-etre dans le mauvais ordre...
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Je viens de relire la notice de ce format en fait je me suis trompé c'est du 16 bits et donc sur 2 octets, est-ce que ca marcherai quand même en adaptant ainsi : ?
$t=array();
$strlen=strlen($s);
for ($i=0;$i<$strlen;$i+=2){
$t[]= ord($s[$i])+ord($s[$i+1]) << 8 ;
}
Je n'ai pas bien compris à quoi correspondait la dernière ligne de code?
Merci de votre aide précieuse
Alors en fait ca fonctionne mais uniquement pour les nombres positifs. En fait j'avais oublié de dire que c'étaient des valeurs "signées" ce qui explique pourquoi les valeurs négatives ne sont pas correctes.
Savez-vous comment faire pour avoir des valeurs signées?
Merci de votre aide
Merci pour cette réponse...
Malheureusement tout ne fonctionne pas encore mais ca va mieux...
J'ai essayé avec cette méthode, mais les valeurs n'étaient toujours pas signées, j'ai donc modifié ce dernier code par celui-ci :
$nbr= ord($s[$i])+ord($s[$i+1]) << 8 ;
if ($nbr & 0x8000){
$nbr= $nbr - 0x010000;
}
$t[]=$nbr;
Simplement voilà, beaucoup de valeurs correspondent bien à ce que je devrais obtenir mais pas tout...
Par exemple lorsque je décode cette chaine de caractère : "ÿ?" le programme me renvoit : "16383", ce qui est la valeur que j'attends donc tout va bien.
Mais quand je décode : " À" il me renvoit "-16352" au lieu de "-16384"
De même quand je décode : " î" il me renvoit "-4576" au lieu de "-4608"
J'ai l'impression que le bug ce produit à chaque fois qu'il y a un espace à décoder et qu'il oublie de retrancher 32...
Où se trouve le problème selon vous?
Merci pour tout
J'ai donc essayé d'adapter mon code par celui-ci :
for ($i=0;$i<$strlen;$i+=2){
$a = $a + 1;
$nbr= ((ord($chaine[$i]))+(ord($chaine[$i+1]) << 8)) ;
if ($nbr & 0x8000){
if ((ord($chaine[$i])) == '32') { $nbr= ((ord($chaine[$i+1]) << 8)) ; }
$nbr= $nbr - 0x010000;
}
Ce qui me permettait de corriger les autres problèmes...
Mais alors maintenant certaines valeurs sont toujours anormales :
La chaîne suivante : " è" est décodée par "-6144" au lieu de "-6112" soit une erreur de 32 encore.
Evidemment avec l'ancien code elle était décodée normallement...
Je ne comprends plus rien.
Merci de votre aide
Effectivement ça rejoint ce que j'avais écrit mais comme je l'avais dit il existe toujours une erreur de 32 pour certaines chaînes.
En fait je pense que le php ne fait pas la différence entre un espace et l'absence de caractère. Ce qui explique que certaines chaînes commençant par " " donnent une bonne valeur alors que d'autres donnent une erreur de 32.
J'ai essayé d'ouvrir le fichier en "binaire" mais ca ne change rien.
Voyez-vous comment faire pour que le php fasse la différence entre ces 2 codages...? Existe-t-il un moyen d'ouvrir le fichier autrement
J'avais essayé ca, mais ca ne marche pas car visiblement php ne fait pas la différence entre l'octet codé 32 et celui codé 0.
Donc pour certaines valeurs ca marchera mais pas pour tout
Mais je ne vois pas comment il serait possible de faire la différence avec un script php entre ces 2 octets...
Avez-vous une idée?
Merci pour tout
En fait j'ai enfin trouver la réponse. En fait c'est de ma faute j'avais initialement ouvert le fichier que je voulais lire avec un fichier texte qui lui ne fait pas la différence entre ces 2 octets alors que le php oui...
Donc si vous rencontrez le même soucis que moi ne vous fier pas à l'affichage que peut vous renvoyer un fichier texte...
Encore mci pour ton aide précieus "coucou747".