Convertion de type [Résolu]

Signaler
Messages postés
5
Date d'inscription
vendredi 20 août 2004
Statut
Membre
Dernière intervention
5 décembre 2007
-
 Utilisateur anonyme -
Bonjour,

Je recherche le moyen de convertir les octets en entiers...
Je m'explique:
Je dispose d'une variable de type byte[]. Le but est de recupere dans une variable de type int chaque octet en clair.
Exemple: si t[5]={0x34,0x76,0x03,0x99,0x13}, je veux pouvoir avoir
a=34, b=76, c=3, D=99, e=13 avec a,b,c,det e de type int.
J'ai tente d'utiliser Integer.toString(z[i],16) pour une convertion en string, mais ca ne convient pas.
Est ce qqn peut me tuyauter?

Batbihirulau

5 réponses


Je comprends mais un "bleu" doit apprendre à se servir de la documentation de l'API de Java, c'est incontournable. Même un bouquin de 350 pages ne peut pas explorer tous les aspects de Java. A l'université et à l'IUT, on nous a appris à prendre ce genre de réflexe et je te conseille vivement de t'y mettre. Un ouvrage d'introduction à Java peut te permettre de saisir la syntaxe du langage et les concepts mais c'est insuffisant pour te dire quelles classes utiliser en fonction de tes besoins. D'ailleurs, si tu avais utilisé la documentation de Java correctement, tu n'aurais même pas eu besoin de venir ici. Bon courage.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java

0x34 ça veut dire que c'est de l'hexadécimal, tu mélanges tout. a= 0x34 = 3*16 + 4 * 1 = 52 (en base 10)
Si tu as un tableau de type byte, le signe est sur un bit et les 7 autres bits codent le chiffre. Tu fais alors directement :
byte[] t=new byte[]{0x34,0x76,0x03,0x99,0x13};
int[] int_tab = new int[t.length];
for(int i =0;i<t.length;i++)
      int_tab[i]=t[i];

Dans ton tableau de "byte" tu pourrais aussi mettre directement byte[] t=new byte[]{34,76,3,99,13};
Ton esprit est confus j'ai l'impression.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
Messages postés
5
Date d'inscription
vendredi 20 août 2004
Statut
Membre
Dernière intervention
5 décembre 2007

Effectivement, les elements de mon tableau byte[] sont des valeurs en hexa.
Mais le but n'est pas de recuperer les equivalents en base 10 ou autre.
Les elements du tableau seront compris entre 0x00 et 0x99. Ca, c'est le point de depart. Le but est de pouvoir afficher (dans la console par exemple) les digits hexa en nombre entier: 0x13->13, 0x99->99.
Autre exemple encore plus concret:
si t[5]={0x18,0x21,0x13,0x99,0x10}, me servira a en deduire qu'il est 21heure 13minutes car "t[1]=21" et "t[2]=13"(les autre valeurs ne sont pas utilisées).
Est ce que j'eclaire ou j'obscurcie???

Batbihirulau

D'abord, si tu prends les éléments entre 0x00 et 0x99, ça veut dire que tu auras aussi dans ton tableau l'élément 0x1A. Je ne comprends pas pourquoi tu veux te servir de valeurs hexadécimales. La fonction Integer.toHexString(int i) te renvoie la chaîne qui représente en base 16 l'entier que tu lui passes en base 10. Je ne sais pas si ça peut te servir...
"0x13->13"?? Utilise le printf de Java 6 avec les mêmes options de formatage qu'en C et tu afficheras ta valeur en hexadécimal.

"si t[5]={0x18,0x21,0x13,0x99,0x10}, me servira a en deduire qu'il est 21heure 13minutes car "t[1]=21" et "t[2]=13""
Ca c'est complètement faux. t[1]=21 en base 16 =2*16 + 1 *1 = 33 en base 10
Mais si tu veux afficher 21 quand t[1]=0x21, alors fais ainsi:
System.out.println(""+Integer.toHexString(t[1]));

Le plus simple reste de mettre directement des valeurs décimales dans ton tableau :
byte[] t=new byte[]{0x18,0x21,0x13,0x99,0x10};

Enfin, jette un coup d'oeil dans la documentation de Java, c'est le premier réflexe à avoir quand tu programmes :
http://java.sun.com/javase/6/docs/api/

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
Messages postés
5
Date d'inscription
vendredi 20 août 2004
Statut
Membre
Dernière intervention
5 décembre 2007

OK, la solution "Integer.toHexString" est exactement ce que je cherchais. MERCI.
La doc java etant plutot "touffue", il n'est pas toujours facil pour un 'bleu' de s'y retrouver. J'utilise plus facilement l"introduction a java" d'O'Reilly.

Batbihirulau