Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : integer [ Divers / Général ] (magicsmacks)

jeudi 6 mars 2008 à 23:13:36 | integer

magicsmacks

Bonjour,

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;å'æ~èTêïë�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

MAGICSMACKS[:p]

vendredi 7 mars 2008 à 00:07:22 | Re : integer

coucou747

salut

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 :

$s ta chaine

$t=array();
$strlen=strlen($s);
for ($i=0;$i<$strlen;$i+=4){
    $t[]= ord($s[$i])+ord($s[$i+1]) << 8 + ord($s[$i+2]) << 16 + ord($s[$i+3]) << 24;
}

les 8, 16 et 24 sont peut-etre dans le mauvais ordre...
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/

vendredi 7 mars 2008 à 07:47:18 | Re : integer

magicsmacks

Bonjour, merci bcp pour cette réponse

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

MAGICSMACKS[:p]

vendredi 7 mars 2008 à 14:06:58 | Re : integer

coucou747

ca devrait marcher.

regarde les operateurs binaires, et ce que fait la fonction ord (cf php.net )

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/

samedi 22 mars 2008 à 08:43:20 | Re : integer

magicsmacks

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

MAGICSMACKS[:p]

samedi 22 mars 2008 à 11:53:33 | Re : integer

coucou747

Réponse acceptée !

$nbr= ord($s[$i])+ord($s[$i+1]) << 8 ;

if ($nbr & 0x8000){
$nbr=0x010000 - $nbr;
}

$t[]=$nbr;

samedi 22 mars 2008 à 15:00:58 | Re : integer

magicsmacks

Bonjour,

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

MAGICSMACKS[:p]

samedi 22 mars 2008 à 15:35:05 | Re : integer

magicsmacks

Rebonjour,

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

MAGICSMACKS[:p]


samedi 22 mars 2008 à 15:57:16 | Re : integer

coucou747


if ($nbr & 0x8000){  // si le bit de signe est a 1 alors c'est un negatif
$nbr=0x010000 - $nbr; // si c'est un negatif, alors


c'est la que je me suis plante :)

tu peux essayer :


$nbr= 0xFFFF0000 & $nbr;

ou

$nbr= - (0x010000 - $nbr);

}

a mon avis, les deux devraient fonctionner

lundi 24 mars 2008 à 12:30:13 | Re : integer

magicsmacks

Merci beaucoup,

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

Merci d'avance

MAGICSMACKS[:p]



1 2

Cette discussion est classé dans : integer, décoder


Répondre à ce message

Sujets en rapport avec ce message

Type Integer... Arrondi de la valeur [ par ripoux ] Bonjour à tous,J'ai un petit problème avec des variables que je dois set au type Int !J'affiche dans mon applic web des résultats en % et en fait le p Décoder un sha1 [ par liteulkevin ] Bonjour, J'ai créer un script qui code des password avec un sha1. Jusque là pas de soucis. Mais comment décrypter ce code après? Merci d'avance. ID : Float ou Integer ? [ par MadM@tt ] Petite question à 2 balles : dans vos tables vos id ce sont des float ou des integer ? Perso j'ai mis float comme ça on peut avoir des chiffres plus g faire une recherche dans une base donnee po voir si un film existe ou pas [ par beur81 ] bonjour voila ,je suis entrain de faire une pgm qui gere des films mais j'aimerais faire une recherche appartir du nom pur voir si le film existe ou p Conversion String Integer (entre autres) [ par thececilia ] Bonjour à tous !voici mon problème : je suis en train de créer un site dans lequel les gens rentrent des matrices par le biais de "input type=text". J Demande d'aide pour décoder un cryptage [ par hermesdesbrumes ] Bonjour tout le monde,Je ne ferai qu'une brève apparition sur votre forum,Je vous pries de bien vouloir m'excuser pour mon culot mais j'ai besoin de v preg_match [ par protozorus ] bonjour a tous, je cree une base de donnee en php  et je souhaiterai verifier la presence a chacune des lignes saisies de certains elements.ex:create petites questions sur les bitwise [ par jdaviaud ] je souhaite réutiliser une classe utilisant les bitwises pour gérer des droits d'accès utilisateurs, cette classe fonctionnait bien avec mon ancien se coder/décoder du json [ par sagat06 ] Bonjour à tous,j'ai récemment installé en local php 5.2.6 dans le but d'avoir nativement json_decode et encode();Jusqu'alors je codais des objet json


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.