IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

manipulation tableau de byte et hexa


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Developper
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Developper

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Points : 53
    Points
    53
    Par défaut manipulation tableau de byte et hexa
    Bonjour,

    Je cherche à récupèrer des informations avec jpcsc sur une carte et je récupère ainsi un tableau de 62 byte avec une commande du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] response = card.Transmit(ba, 0, ba.length);
    Le truc c'est qu'ensuite je ne sais pas trop comment manipuler ce tableau. Je m'explique.
    4 des cellules de ce tableau contienne un numéro. En hexa, je peux avoir donc entre 0 et FF FF FF FF donc 0 et 4294967295 en décimal. Sauf que quand j'inspecte ces 4 cellules, j'ai des nombres positifs et négatifs, sans doute parce que byte ne va que jusqu'à + 128.
    j'ai trouvé une solution en convertissant ma portion de 4 cellule en une String qui contient la valeur en hexa puis en reconvertissant cette string en int... mais j'ai l'impression d'avoir monter une usine à gaz :

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         //bTemp est un tableau de 4 byte dans lequel j'ai copié les cellules 
         // de response[] qui  m'intéresse.
          idCard = Integer.parseInt(Util.getHexString(bTemp),16);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            // trouvé sur le forum developpez.net
            public static String getHexString(byte[] bytes) {
    		StringBuilder sb = new StringBuilder(bytes.length*2);
    		for (byte b : bytes) {
    			sb.append( String.format("%x", b) );
    		}
    		return sb.toString();
    	}
    Pour traiter d'autres infos sur la carte, j'ai besoin de travaller sur les bits de chaque octet. J'ai fais la même conversion. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int octet1 = Integer.parseInt(Util.getHexString(response[44]),16);
    ...
    if ((octet1 & 0x80) != 0) // je test le bit de poid fort
    ...
    La encore je pourrais faire plus simple ?

    Merci pour votre aide.

    Cordialement


    harf

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Convertir un byte en entier en considérant le byte en unsigned :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte b = 127; //valeur max
    b += 10; //b vaut maintenant -119
    int entier = b & 0xFF; //entier vaut 137
    Pour coller plusieurs byte, utilise l'opérateur de décalage de bit <<.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Le truc, c'est que java n'utilise pas de nombres non signés.
    Donc, deja, comme ta valeur est sur 32bits, il faut utiliser des long (avec des int, tu ne peux pas avoir 4294967295 car les int sont codes sur 32 bits signes).
    et pour avoir ta valeur, tu peux utiliser :
    long val = (((long)b[0] & 0xFF) << 0) + (((long)b[1] & 0xFF) << 8) + (((long)b[2] & 0xFF) << 16) + (((long)b[3] & 0xFF) << 24);

    a+

  4. #4
    Membre du Club
    Profil pro
    Developper
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Developper

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Points : 53
    Points
    53
    Par défaut
    Merci pour vos réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Socket][File] Envoyer un tableau de byte
    Par itsmii dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 30/01/2014, 09h10
  2. Réponses: 1
    Dernier message: 21/05/2012, 12h08
  3. Socket, tableau de byte et Hexa
    Par hussein47 dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/08/2009, 17h57
  4. string hexa to tableau de byte
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/07/2007, 12h37
  5. tableau de byte + conversion hexa
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/07/2007, 08h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo