Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1537 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  conversion int java en int php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conversion int java en int php

n°2169645
XP-1000
Dovakhin !
Posté le 02-01-2013 à 18:42:02  profilanswer
 

Bonjour à toutes et à tous,
 
Je suis actuellement confronté à un problème qui m'est relativement complexe.
J'ai un serveur en PHP qui reçoit un integer d'un client java.
Or, les integer sont encodés complètement différemment en php et en java.
J'ai trouvé sur la toile une manière de convertir un integer php en integer java :
 

Code :
  1. function writeByte($b)
  2. {
  3.  global $buf;
  4.  $buf[] = pack('c' ,$b);
  5. }
  6. // function to write an Integer with java way
  7. function writeInt($v)
  8. {
  9.  writeByte(shiftRight3($v , 24) & 0xFF);
  10.  writeByte(shiftRight3($v , 16) & 0xFF);
  11.  writeByte(shiftRight3($v ,  8) & 0xFF);
  12.  writeByte(shiftRight3($v ,  0) & 0xFF);
  13. }
  14. function shiftRight3($a ,$b)
  15. {
  16.  if(is_numeric($a) && $a < 0)
  17.  {
  18.   // "~" seems not be mondatory
  19.   return ($a >> $b) + (2<<~$b);
  20.  }
  21.  else
  22.  {
  23.   return ($a >> $b);
  24.  }
  25. }


 
Avec ceci, il suffit d'envoyer un nombre à la fonction writeInt et le tout est converti dans un tableau de 4 bytes sous la forme d'un integer java.
 
Maintenant j'aimerais faire l'inverse ; à partir d'un tableau de 4 bytes, je voudrais récupérer un integer php.
 
J'ai utilisé la fonction unpack pour convertir les bytes en int php.  
Ainsi de 0 à 127, le 4ème byte de mon tableau contient le bon int php,
Le problème arrive sur des valeurs supérieures à 127.
 
C'est pour cela qu'il effectuer un traitement de conversion.
 
Si quelqu'un pouvait m'aider, je lui en serais reconnaissant :D

mood
Publicité
Posté le 02-01-2013 à 18:42:02  profilanswer
 

n°2169667
CyberDenix
Posté le 03-01-2013 à 00:50:34  profilanswer
 

Mec, tu le reçois comment ton int ?
 
Via socket ?
Via WebService ?
 
Si tu as la main sur le Java, essaye de convertir tes Integers en type primitif int, genre : int b = (int)a;


---------------
Directeur Technique (CTO)
n°2169680
XP-1000
Dovakhin !
Posté le 03-01-2013 à 09:47:21  profilanswer
 

Bonjour CyberDenix,
Merci pour ta réponse.

 

Je reçois mon int via socket tcp classique.
J'ai la main sur le java oui et j'y avais déjà pensé mais je préférerais exporter le traitement côté php si possible.

 

Merci


Message édité par XP-1000 le 03-01-2013 à 09:49:02

---------------
Pourquoi linux est meilleur ?
n°2169696
XP-1000
Dovakhin !
Posté le 03-01-2013 à 11:12:04  profilanswer
 

Bonjour tout le monde,
 
Je vous propose une solution un peu crado:  
 

Code :
  1. $buf = array();
  2. readByte($java_bytes);
  3. $conv_int = 256*256*256*$buf[0] + 256*256*$buf[1] + 256*$buf[2] + $buf[3];
  4. echo "L'entier convertie est = " . $conv_int . "\n";
  5. function readByte($b)
  6. {
  7.  global $buf;
  8.  $buf = array();
  9.  $tmp = unpack('c' ,$b[0]);
  10.  $buf[] = $tmp[1];
  11.  $tmp = unpack('c' ,$b[1]);
  12.  $buf[] = $tmp[1];
  13.  $tmp = unpack('c' ,$b[2]);
  14.  $buf[] = $tmp[1];
  15.  $tmp = unpack('c' ,$b[3]);
  16.  $buf[] = $tmp[1];
  17.  readInt();
  18. }
  19. function readInt()
  20. {
  21.  global $buf;
  22.  for ($i=0; $i<count($buf); $i++)
  23.  {
  24.   if ($buf[$i] < 0)
  25.    $buf[$i] += 256;
  26.  }
  27. }


 
Voila il suffit donc d'appeler la fonction readByte et lui envoyer en argument un tableau de byte style java.
Bon ca fonctionne mais jusqu'à quelle point ... Il y a peut être des exceptions à gérer.
Enfin en attendant une solution plus propre
 
Bonne journée


---------------
Pourquoi linux est meilleur ?
n°2169824
tsoko
Posté le 04-01-2013 à 10:43:18  profilanswer
 

oui c'est vrai que c'est pas extra mais je pense qu'il y a moyen de faire mieux...


---------------
Besoin d'aide pour votre projet? agence web
n°2169935
XP-1000
Dovakhin !
Posté le 04-01-2013 à 21:26:10  profilanswer
 

oui j'avoue c'est un peu crado ^^ Je pense aussi qu'il y a une bien meilleure solution.
En l'attendant celle-ci fera l'affaire


---------------
Pourquoi linux est meilleur ?

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  conversion int java en int php

 

Sujets relatifs
[JAVA] mystere de conversion string - byte[ ] [Résolu] ][Java] Conversion d'une chaîne HTML en Unicode
SQL conversion d'une date en DATETIME en javaConversion sources C en source asm (en java)
conversion d'un float en String avec java[JAVA] Probleme de conversion de String en Date?
[java] une lib de conversion texte vers html ?[Java] Conversion Jpg, Gif, Bmp
[Java] Conversion int,double <-> object est ce possible? [Résolu][JAVA] conversion ASCII => Unicode
Plus de sujets relatifs à : conversion int java en int php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR