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 :

Conversion d'un tableau d'octets en entier


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Par défaut Conversion d'un tableau d'octets en entier
    Bonjour à tous,

    Une petite question toute bête : je voudrais convertir un les éléments d'un tableau de 5 octets en un entier. J'ai essayé de faire la conversion à la main, mais j'ai des erreurs de conversion dès le 2ème octet. Voici ce que j'ai fait :

    ((int)Tab[ACCOUNT1]*4096) + ((int)Tab[ACCOUNT2]*256) + ((int)Tab[ACCOUNT3])

    Quelqu'un connaitrait-il par hazard une manière de convertir ce type de données de manière "propre et fiable"?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Citation Envoyé par noutnout53
    je voudrais convertir un les éléments d'un tableau de 5 octets en un entier
    Hello,

    Tu peux juste expliquer un peu davantage la situation qui n'est pas très claire (pour moi en tout cas). Tu as un tableau de 5 éléments c'est ca? Ces 5 éléments contiennent des bytes et tu voudrais les convertir en un entier?

    Si c'est ca tu peux jouer avec le décalage par bit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int entier = 0;
    for(int i=0;i<tab.length;i++){
       entier += tab[i] << i;
    }
    Ce code n'a pas été testé mais ca devrait aller

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Citation Envoyé par Pollux
    Ce code n'a pas été testé mais ca devrait aller
    Ca doit être plutôt quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int entier = 0;
    for(int i=0;i<tab.length && i<=4;i++){
       entier += tab[i] << i * 8;
    }

  4. #4
    Membre averti
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Par défaut
    Merci de ta réponse,

    En fait, mon but est de convertir le contenu d'un tableau. Par exemple, si j'ai

    tab[0] = 0x03
    tab[1] = 0xE8

    alors, je voudrais que mon entier récupère la valeur 1000

    (0x03E8 --> 1000 en décimal)

  5. #5
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    L'api Integer t'offre les outils nécessaires pour cette conversion.

    http://java.sun.com/j2se/1.5.0/docs/...g.String, int)

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Je m'été fait des méthodes qui font quelque chose de semblable à ce que tu cherche, tu doit sûrement pouvoir t'en inspirer .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    /**
         * Renvoie la représentation de l'int spécifié en tableau de byte 
         * (l'octet de poids faible se trouve à l'indice 0).
         * @return la représentation de l'int spécifié en tableau de byte
         */
        static final public byte[] intToBytes(int integer) {
            byte[] bytes = new byte[4];
            for(int i = 0; i < 4; i ++) {
                bytes[i] = (byte) (integer % 256);
                integer = integer >> 8;
            }
            return bytes;
        }
     
        /**
         * Renvoie la représentation du long spécifié en tableau de byte 
         * (l'octet de poids faible se trouve à l'indice 0).
         * @return la représentation du long spécifié en tableau de byte
         */
        static final public byte[] longToBytes(long l) {
            byte[] bytes = new byte[8];
            for(int i = 0; i < 8; i ++) {
                bytes[i] = (byte) (l % 256);
                l = l >> 8;
            }
            return bytes;
        }
     
        /**
         * Renvoie l'int représenté par le tableau de byte spécifié.
         * @return l'int représenté par le tableau de byte spécifié
         */
        static final public int bytesToInt(byte[] bytes) {
            int integer = 0;
            for(int i = 0; i < 4; i ++) {
                integer += ((256 + bytes[i]) % 256) * (int)Math.pow(256, i);
            }
            return integer;
        }
     
        /**
         * Renvoie le long représenté par le tableau de byte spécifié.
         * @return le long représenté par le tableau de byte spécifié
         */
        static final public long bytesToLong(byte[] bytes) {
            long l = 0L;
            for(int i = 0; i < 8; i ++) {
                l += ((256 + bytes[i]) % 256) * (long)Math.pow(256, i);
            }
            return l;
        }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Réponses: 24
    Dernier message: 17/06/2015, 08h40
  2. Conversion string en tableau d'entiers
    Par svagrim dans le forum Débuter
    Réponses: 6
    Dernier message: 07/02/2013, 00h29
  3. Conversion d'une chaîne en tableau d'octets
    Par marsupilami34 dans le forum Langage
    Réponses: 11
    Dernier message: 22/06/2005, 14h44
  4. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08
  5. [Kylix] stockage d'un tableau d'octets dans interbase
    Par georges1001 dans le forum EDI
    Réponses: 1
    Dernier message: 16/09/2003, 14h14

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