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 :
- function writeByte($b)
- {
- global $buf;
- $buf[] = pack('c' ,$b);
- }
- // function to write an Integer with java way
- function writeInt($v)
- {
- writeByte(shiftRight3($v , 24) & 0xFF);
- writeByte(shiftRight3($v , 16) & 0xFF);
- writeByte(shiftRight3($v , 8) & 0xFF);
- writeByte(shiftRight3($v , 0) & 0xFF);
- }
- function shiftRight3($a ,$b)
- {
- if(is_numeric($a) && $a < 0)
- {
- // "~" seems not be mondatory
- return ($a >> $b) + (2<<~$b);
- }
- else
- {
- return ($a >> $b);
- }
- }
|
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