misterzinzin
Messages postés112Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention26 janvier 2011
-
14 nov. 2005 à 23:51
misterzinzin
Messages postés112Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention26 janvier 2011
-
15 nov. 2005 à 18:37
bonjour, j'ai développé un serveur en c++ sous linux qui est interrogé
par des serveur c++... tout marche bien... mon probleme se situe coté
client en java...
en fait tout fonctionne bien... sauf que:
losque le serveur envois un "int" sur le réseau, il envois 4 byte (sizeof(int))
mes 4 byte sont récupéré coté java dans un byte[] qui fait 4 byte.
le probleme est le suivant: comment convertir un byte[] en int
et comment convertir un int en byte[]... pour que ca marche a tout les coup?
ensuite, ce n'est pas parce que pour E8, il dit -24 que la conversion est fausse !!
byte est signé en Java !
donc (byte) E8 = -24 en java :)
dans la dernière ligne, les &0xff servent justement à éviter un problème de cast lié à ça :
si je fais simplement
int j = (b1 <<24) | (b2<<16) | (b3<<8) | b4;
alors si par hasard b4 E8 -24 :)
il fait un cast en (int) pour le '+', qui donne :
(int) b4 FFFFFFE8 -24 en int --> et notre recomposition est fausse :)
on veut plutôt 000000E8 en int :)
A+
Dobel
[Une fois rien, c'est rien; deux fois rien, ce
n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter
quelque chose, et pour pas cher]
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 15 nov. 2005 à 01:27
Dans le code que j'ai mis, pour la décomposition, les & 0xff sont
inutiles, puisque le cast d'un int en byte en java revient à
prendre les 8 bits de poids faible :)
donc simplement :
byte b4 = (byte) i;
i = i>>8;
byte b3 = (byte) i;
i = i>>8;
byte b2 = (byte) i;
i = i>>8;
byte b1 = (byte) i;
Dobel
[Une fois rien,
c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois
rien, on peut déjà s'acheter quelque chose, et pour pas cher]