Ecrire un hexa [Résolu]

Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
- - Dernière réponse : hindou23
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
- 25 juil. 2011 à 17:53
Bonjour tt l monde,

J'aimerai bien savoir comment déclarer un nombre écrit en hexa au serveur autant que le serveur pourra le connaitre..

Comme par exemple j'ai le nombre en hexa :

60 60 00 00 04 00 00 03

comment le déclarer dans mon code.

Merci
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
3
Merci
Salut,

Si ton entier avait été sur 32 bits, tu aurais pu écrire directement :
int entier32 = 0x60600000;

Pour un entier 64 bits, cette notation ne marche pas je crois, tu dois donc passer par la classe Long :

long entier64 = Long.decode("0x6060000004000003");
ou bien
long entier64 = Long.parseLong("6060000004000003", 16);

Je ne crois pas qu'il y ait plus simple.

Cordialement,
Jonathan Guéhenneux

Merci cs_jojolemariole 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
3
Merci
Salut,

Le plus simple serait d'utiliser un DataOutputStream.

côté client

[...]
Socket s = ...
OutputStream out = s.getOutputStream();
DataOutputStream dataOut = new DataOutputStream(out);
dataOut.writeLong(monHexa);
[...]

côté serveur

[...]
Socket s = ...
IntputStream in = s.getInputStream();
DataInputStream dataIn = new DataInputStream(in);
long monHexa = dataIn.readLong();
[...]


C'est très grossier mais si tu as l'habitude de travailler avec les Socket, tu devrais pouvoir adapter ça à ton code.

Cdlt,
Jonathan Guéhenneux

Merci cs_jojolemariole 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_jojolemariole
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
0
Merci
Merci Jonathan pour ta réponse... et si jamais j'étais du coté client et je voudrais envoyer au serveur la chaine de caractére en hexa via les sockets

Est-ce- que de je dois déclarer un tableau de byte[] ou je mets dedans mon message qui sera sous type ossi de byte ou quoi???

Merci
Commenter la réponse de hindou23
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
0
Merci
Exactement, je travaille avec les sockets et j'ai créé ce code pour en envoyer ma chaine de caractére sous forme d'hexa au serveur mais le probléme c'est que le serveur la considére comme un string et la retransforme en hexa...

Voici le code de la conversion et de l'envoi...


public byte[] hexStringtobyteArray (String message){



int len = message.length();
byte[] data = new byte[len/2];

for (int i = 0 ; i<len ; i+=2)
{
data [i/2]= (byte)((Character.digit(message.charAt(i),16) << 4)+
Character.digit(message.charAt(i+1),16));
}

System.out.println("la modofication est :" +message);
System.out.println(data);

return data;

}







public void send (String message){


PrintStream ps;

try {
System.out.println("le message est:" +message);


ps = new PrintStream(this.socket.getOutputStream());
if(ps != null) {


ps.print(message);
}
} catch(IOException e) {
System.err.println("Exception send: " +e.getMessage());
}
}



Merci pour votre aide.
Commenter la réponse de hindou23
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
0
Merci
Salut,

Tu te compliques un peu la vie en faisant toi même la conversion de ta chaîne en byte[]. Avec un DataOutputStream, tu as juste à faire :

dos.writeLong(Long.decode(chaineHexa));

C'est quand même plus court !

Pour répondre à ta question, est-ce toi qui code le serveur ?
Commenter la réponse de cs_jojolemariole
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
0
Merci
Noo!! le serveur est déja codé par une autre personne..tous ce que je dois faire c'est pouvoir envoyer ce code : 6060000004000003202038018000C000030000000000050726050804000100313132323333343435393031353439373032202020202000150008393045563034303130313736004244303034334630

Pour que le serveur puisse le transformer sous forme de:

60 60 00 00 04 00 00 03 20 20 38 01 80 00 C0 00 03 00 00 00 00 00 05 07 26 05 08 04 00 01 00 31 31 32 32 33 33 34
34 35 39 30 31 35 34 39 37 30 32 20 20 20 20 20 00 15 00 08 39 30 45 56 30 34 30 31 30 31 37 36 00 42 44 30 30 34
33 46 30

Vu que j'ai déclarer le message d'envoi en String c pour ca j'ai utilisé la méthode de conversion d'un string hexa vers un byte array !!!

Qu'est ce que je dois faire mnt???
Commenter la réponse de hindou23
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
0
Merci
Le serveur doit avoir le message envoyé sous cette forme : 60 60 00 00 04 00 00 03 20 20 38 01 80 00 C0 00 03 00 00 00 00 00 05 07 26 05 08 04 00 01 00 31 31 32 32 33 33 34 34 35 39 30 31 35 34 39 37 30 32 20 20 20 20 20 00 15 00 08 39 30 45 56 30 34 30 31 30 31 37 36 00 42 44 30 30 34
33 46 30

pour pouvoir le traiter!!!

Merci pour votre aide
Commenter la réponse de hindou23
Messages postés
42
Date d'inscription
lundi 7 septembre 2009
Dernière intervention
20 octobre 2011
0
Merci
Bonjour,

J'en ai bien suivi les démarches du code que vous m'avez montré mais ca marche seulement avec une chaine de petite taille comme 0x6060000004000003 Mais dés que je rajoute que 2 chiffres ca se bloque et un message d'erreur s'affiche suit:

java.lang.NumberFormatException: For input string: "606000000400000320"
java.lang.NumberFormatException.forInputString(Unknown Source)
java.lang.Long.parseLong(Unknown Source)
java.lang.Long.valueOf(Unknown Source)
java.lang.Long.decode(Unknown Source)
com.metier.CommuniServeur.send(CommuniServeur.java:156)
com.action.InquiryThread.run(InquiryThread.java:35)
com.action.Connexion.execute(Connexion.java:61)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
Commenter la réponse de hindou23

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.