conversion int java en int php

conversion int java en int php - PHP - Programmation

Marsh Posté le 02-01-2013 à 18:42:02    

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

Reply

Marsh Posté le 02-01-2013 à 18:42:02   

Reply

Marsh Posté le 03-01-2013 à 00:50:34    

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)
Reply

Marsh Posté le 03-01-2013 à 09:47:21    

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 ?
Reply

Marsh Posté le 03-01-2013 à 11:12:04    

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 ?
Reply

Marsh Posté le 04-01-2013 à 10:43:18    

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
Reply

Marsh Posté le 04-01-2013 à 21:26:10    

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 ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed