Petit probleme String -> Ascii -> byte
Résolu
mariostar27
Messages postés
391
Date d'inscription
Statut
Membre
Dernière intervention
-
mariostar27 Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
mariostar27 Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
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 :
[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
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
A voir également:
- Petit probleme String -> Ascii -> byte
- Code ascii - Guide
- Malware byte - Télécharger - Antivirus & Antimalwares
- Petit 2 ✓ - Forum Bureautique
- Trier du plus petit au plus grand excel - Guide
- Petit 3 ✓ - Forum Word
6 réponses
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:
Cela devrait donc corriger ton code pour fonctionner.
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.
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
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
dans ton code, (byte) Integer.parseInt(16,Integer.toHexString(heure));
remplace heure par 15. il te retournera 15.
j'ai effectuer ceci :
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 :
et donc, je souhaite que la valeur b remplace le 0b.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ???
de 26 à 1a puis à 0x1a
de 32 à 20 puis à 0x20
des valeur comme celle si.
une idée ???
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:
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);