Ecrire un hexa [Résolu]

hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 19 juil. 2011 à 17:41 - Dernière réponse : hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention
- 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 

8 réponses

Répondre au sujet
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 19 juil. 2011 à 18:05
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jojolemariole
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 20 juil. 2011 à 11:27
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jojolemariole
hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 20 juil. 2011 à 11:16
0
Utile
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
hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 22 juil. 2011 à 10:26
0
Utile
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
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 22 juil. 2011 à 10:41
0
Utile
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
hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 22 juil. 2011 à 11:00
0
Utile
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
hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 22 juil. 2011 à 11:07
0
Utile
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
hindou23 42 Messages postés lundi 7 septembre 2009Date d'inscription 20 octobre 2011 Dernière intervention - 25 juil. 2011 à 17:53
0
Utile
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.