begin process at 2010 02 10 08:37:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

integer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

integer

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ée 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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,218 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales