danimo
1048Messages postés
15 janvier 2006Date d'inscription
29 mai 2012Dernière intervention
9 août 2009 à 06:47
RE,
Je vais essayer de t'expliquer mon code.
Le principe est le suivant:
J'ai un tableau de Strings (tabStr) dans lequel je crée 3 bytes (octets).
Prenons le 1er byte "00011000" qui est composé de 2 quartets:
-Quartet de gauche "0001" est composé de 4 bits qui peuvent prendre les valeur 0 ou 1 (oui ou non).
Le 1er bit de ce quartet prend la valeur décimale 8 s'il est à 1 ou la valeur 0 s'il est à 0.
Le second bit prend la valeur 4 s'il est à 1 ou la valeur 0 s'il est à 0.
Le troisième 2 s'il est à 1 ou 0 s'il est à 0.
Et le quatrième et dernier 1 s'il est à 1 ou 0 s'il est à 0.
Reprenons notre quartet "0001":
Le 1er bit vaut 0, le 2ème vaut 0, le 3ème vaut 0 et le 4ème vaut 1.
Additionnons dans valDec les 4 valeurs: int valDec = 0 + 0 + 0 + 1 = 1 que l'on converti en hexa dans valHex:
String valHex = Integer.toString(ValDec, 16); soit la valeur hexa 1 que l'on range dans resultHex:
String resultHex = valHex; soit la valeur hexa 1
Passons au quartet de droite "1000":
Selons le même principe, le bit 1 vaut 8, le 2 vaut 0, le 3 vaut 0 et le 4 vaut 0 et 8 + 0 + 0 + 0 = 8 soit:
valDec = 8 que l'on converti en hexa dand valHex:
valHex = Integer.toString(ValDec, 16); soit la valeur hexa 8 que cette fois on vat concaténer dans resultHex:
resultHex+= valHex; soit resultHex = 18. C'est un String qui contient la valeur hexa 18 que l'on peut écrire
(18)16 18 base 16.
Mais comme le tableau tabStr est un tableau de Strings, pour extraire les "bits" j'utilise entre autres possibilités la méthode substring et je converti le String bit obtenu en int:
valDec = Integer.parseInt(tabStr[iTab].substring(i, i+1)); soit (0, 1) pour le 1er bit (1, 2) pour le 2ème etc...
Et en fait je n'additionne pas directement dans valDec mais dans totValDec:
Int totValDec+= valDec*8; pour le 1er bit (i = 0), si valDec = 1 on additionne 1*8 sinon 0*8
totValDec+= valDec*4; pour le 2èmer bit (i = 1), si valDec = 1 on additionne 1*4 sinon 0*4
totValDec+= valDec*2; pour le 3èmer bit (i = 2) si valDec = 1 on additionne 1*2 sinon 0*2 et
totValDec+= valDec*1; pour le 4èmer bit (i = 3) si valDec = 1 on additionne 1*1 sinon 0*1.
Remarque 1:
while(encore)
{
et
encore = false;
}
sont à supprimer même si çà fonctionne en les laissant: jétais parti sur une autre idée abandonnée...
Remarque 2:
Bien entendu, c'est du "brut de fonderie" çà peut se simplifier par exemple en mettant le traitement des 2 quartets dans la même boucle, et même poursuivre le traitement en ajoutant les 2ème et 3ème élements de tabStr à resultHex et obtenir (186FFF)16
Cordialement,
Dan