Petit probleme String -> Ascii -> byte

Résolu/Fermé
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 - 18 mars 2010 à 11:06
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 - 19 mars 2010 à 14:46
voila mon problème :
je dois envoyer une trame TCP sur le réseau pour modifier l'heure d'une machine.
le souci, le voici.

trame à envoyer pour effectuer la mise à jour:

$05
$HH(heure) avec HH : les heures de 00 à 23 ($00 à $17)
$MM(minute) avec MM : les minutes de 00 à 59 ($00 à $3B)
$SS(seconde) avec SS : les secondes de 00 à 59 ($00 à $3B)
$DD(jour) avec DD : la date de 00 à 31 ($00 à $1F)
$MM(mois) avec MM : le mois de 00 à 12 ($00 à $0C)
$AA(année) avec AA : l'année de 00 à 99 ($00 à $63)
$JS(jour de la semaine) avec JS : le jour de la semaine de 00 à 06 ($00 = lundi à $06 = dimanche)
$06


j'ai donc un petit soucis. voici le code que je viens d'effectuer :

public void modifierHeure(int heure, int minute, int seconde, int date, int mois, int annee, int jour){
            byte[] trame = new byte[9];
            trame[0] = 0x05;
            trame[1] = (byte) Integer.parseInt(Integer.toHexString(heure));
            trame[2] = (byte) Integer.parseInt(Integer.toHexString(minute));
            trame[3] = (byte) Integer.parseInt(Integer.toHexString(seconde));
            trame[4] = (byte) Integer.parseInt(Integer.toHexString(date));
            trame[5] = (byte) Integer.parseInt(Integer.toHexString(mois));
            trame[6] = (byte) Integer.parseInt(Integer.toHexString(annee));
            trame[7] = (byte) Integer.parseInt(Integer.toHexString(jour));
            trame[8] = 0x06;
}

[oublions l'envoi de la trame qui se fait par une autre méthode pour le moment]
Mon soucis, pour ceux qui ne l'aurait pas vu ^^, c'est que le Integer.parseInt() ne fonctionne pas du faite que, dans l'ASCII, je peux avoir les lettres A, B, C, D, E et F.
quelqu'un aurait-il une idée ???
merci d'avance

6 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mars 2010 à 13:44
Bonjour,

Normalement, la méthode 'parseInt' peut recevoir deux arguments, dont le premier est la base à utiliser pour parser l'entier, et le second, l'entier à parser.

Dans ton cas donc, ton code se transforme de la manière suivante:
(byte) Integer.parseInt(16,Integer.toHexString(heure));


Cela devrait donc corriger ton code pour fonctionner.

1
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 26
Modifié par mariostar27 le 18/03/2010 à 14:12
Je te remercie kij_82 par contre le 16 se met en 2eme argument de la méthode parseInt()/
Malheureusement ton code ne fonctionne pas. si Integer.toHexString() retourne une valeur en chiffre ( 10, 22, 38, etc...), cela fonctionne. par contre, B, 1A, etc..., cette méthode ne fonctionne plus.
il faudrait faire un truk comme ceci :
11 qui devient en ASCII B puis l'insérer dans un byte comme ceci : 0x0B



gwennael
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 mars 2010 à 14:17
Autant pour moi pour l'erreur, c'est effectivement en second que vient la base.

En quoi ça ne marche pas ? Tu as une exception (ce qui m'étonnerai j'ai testé chez moi), ou simplement tu n'obtiens pas le résultat escompté ?
0
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 26
18 mars 2010 à 14:27
dans ton code, (byte) Integer.parseInt(16,Integer.toHexString(heure));
remplace heure par 15. il te retournera 15.
j'ai effectuer ceci :
String h = Integer.toHexString(heure);
System.out.println(h);
byte c = (byte) Integer.parseInt(Integer.toHexString(15), 16);
System.out.println(c);

h et c n'auront pas la même valeur (même si l'un est un String, l'autre un byte).
il me faut la valeur de h pour la mettre dans un byte. un byte c un entier mais on peut l'entrer comme ceci :
byte b = 0x0b;

et donc, je souhaite que la valeur b remplace le 0b.
0
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 26
18 mars 2010 à 15:05
il faut donc :
11 -> en ASCII -> b -> en byte -> 0x0b
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 26
18 mars 2010 à 15:32
il faut passé de 11 à b puis à 0x0b
de 26 à 1a puis à 0x1a
de 32 à 20 puis à 0x20
des valeur comme celle si.
une idée ???
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 18/03/2010 à 16:42
Et c'est quoi l'intérêt de faire ça ?

0x0b vaut la même chose que 11, sauf que ce n'est pas exprimé dans la même base.
J'ai l'impression que tu cherches à faire un truc pas forcément utile.

Si c'est vraiment ce que tu souhaite, le plus simple reste encore de faire un tableau dans lequel chaque index retourne la valeur hexadécimal que tu cherche à obtenir

Un peu de la sorte:
byte tab[] { 0x01, 0x02, 0x03, 0x04, 0x05, ..., 0x1A, ... }

Et où : tab[10] vaudrait donc 0x0B. (10 pour l'index puisque 11 - 1)

Mais pour les années (grand chiffre), cela va poser problème.


Pour en revenir au fait que je comprenne pas trop l'utilité de ce que tu fais, exécute les lignes de code ci-dessous:

		heure = 23;
		System.out.println(Integer.toHexString(heure));
		Integer myI = Integer.valueOf(Integer.toHexString(heure),16);
		System.out.println("MyI = "+myI.byteValue());
		System.out.println("Bybyte : "+0x17);
		
0
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 26
19 mars 2010 à 14:46
exactement !!!
byte c = 23; équivaut à byte c = 0x17.

Du coup je n'ai pas besoin de faire de conversion.
Vraiment désolé kij-82 merci de m'avoir aider. Enfin comme personne ne répondait cela va peut être aider certaine personne.
encore merci !!!
0