Tu ne devrais pas passer par une chaîne de caractère pour faire cet envoi. Dès que la chaîne ne peut pas être convertie en un entier de type primitif "long", ton programme plante. Utilise plutôt des instances de la classe BigInteger. Par contre, je ne vois pas trop en détail comment tu peux t'en servir dans ton cas précis.
Tu peux créer une instance de la classe BigInteger avec le constructeur BigInteger(byte[] val), tu n'as qu'à lui passer tes valeurs hexadécimales sous forme d'un tableau d'octets et le tour est joué.
hindou23
Messages postés42Date d'inscriptionlundi 7 septembre 2009StatutMembreDernière intervention20 octobre 2011 28 juil. 2011 à 10:34
Bonjour,
Merci pour ta réponse , comme tu m'avais indiqué j'ai utilisé substring et pareShort et ca a marché...
J'avais déja utilisé ByteArray mais il me convertissait la chaine en ASCII et moi je voulais l'envoyer telle qu'elle est puisque ma chaine est en hexa!!!
J'ai un autre petit probléme au cours de la reception, au lieu que je recois juste la code envoyé par mon serveur je recois à la fin plein de zéro et aussi au lieu de recevoir 2 byte par exemple 04 je ne recois que 4
Voici un exemple de la chaine de caractére que je recois du serveur :
2 1 4 33 21 .....21 00000000000000000000000000000000000000000000
Au lieu de recevoir :
02 01 04 33 21 .....21
Voici le code la recpetion:
public String receive() {
String reponse = "";
char[] out = new char[1000];
try{
BufferedReader is = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
is.read(out);
// Close the Connection
is.close();
this.socket.close();
Je ne comprends pas ce que tu fais, ce n'est pas ce que je t'ai proposé de faire. Tu es sensé utiliser un tableau d'octets à la réception ET à l'envoi. Tu ne dois pas passer par des tableaux de caractères, tu dois récupérer les octets et éventuellement appeler Integer.toHexString.
hindou23
Messages postés42Date d'inscriptionlundi 7 septembre 2009StatutMembreDernière intervention20 octobre 2011 28 juil. 2011 à 12:17
l'envoi mnt marche mais le probléme c'est la réception!!!
Au lieu d'avoir la chaine compléte avec les zéro , ils ne s'affichent pas et par de suite une longue suite de zéro aprés la fin de la chaine envoyée par le serveur comme caa:
Tu parles d'hexa, cela veut dire que tu manipules des nombres que tu souhaites afficher en base 16 au lieu de les afficher en base 10. C'est plutôt ta façon de faire qui est bizarre car tu transformes un nombre en chaîne de caractères pour le retransformer en nombre après. Comme ton nombre tient sur 158 bits, tu ne peux pas utiliser une seule valeur stockée dans un type primitif car cela ne peut contenir que de 8 bits (byte) à 64 bits (long) d'où l'idée de stocker tes 158 bits dans plusieurs octets sous forme d'un tableau (byte[]).
Le serveur ne considère pas que c'est une String. Une fois que tu as récupéré ta valeur (ton nombre) via le socket, tu peux utiliser un formateur pour l'afficher sous forme d'hexa avec exactement le nombre de zéros supplémentaires que tu veux à gauche ou à droite. Cordialement.