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

Langage Java Discussion :

convertir un long en byte[]


Sujet :

Langage Java

  1. #1
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut convertir un long en byte[]
    Salut à tous,

    Je voudrais "convertir" un long en byte[], en effet, un long est codé sur 8 octets, je voudrais donc savoir comment je peut récuperer la valeur de ces octets dans un tableau.
    Est-ce que je dois manipuler le long bit par bit pour en extraire les octets ?

    Merci d'avance.

  2. #2
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    Réponse peut etre trop triviale mais la méthode byteValue de la classe Long ne convient pas ?

    si tu as un long l

    tu fais (new Long(l)).byteValue()


    cf la javadoc

  3. #3
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    tu as la métode byteValue() de la classe Long qui te retourne un byte.
    sinon tu peux essayer :
    (long.toString()).getBytes();

  4. #4
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Je crois que je me suis mal exprimé, je veus un tableau de 8 byte qui soit la représentation de mon long.
    exemple :
    soit un long = 256 cela donne en binaire : 0000 00001 0000 0000
    cela donne donc le tableau suivant :
    tab[0] = 0;
    tab[1] = 1;
    tab[2] = 0;
    tab[3] = 0;
    tab[4] = 0;
    tab[5] = 0;
    tab[6] = 0;
    tab[7] = 0;

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long l = ...;
    byte[] b = new byte[8];
    for (int i = 0; i < b.length; i++) {
      b[i] = (l >> i) & 0xFF;
    }
    Hop.

  6. #6
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    Sans vérification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            long l = 53;
            String s = Long.toBinaryString(l);
            byte[] res = new byte[s.length()];
            for (int i=0;i<s.length();i++) {
                System.out.println(s.charAt(i));
                res[i] = (byte) s.charAt(i);
            }

  7. #7
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    (1 octet=1 byte)<=>8 bits c'est bien cela ?
    8 octets ça nous fait du 64 bits !

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    guipom : ton code est faux, il donne le code ascii des caracteres '0' et '1' dans le tableau. En fait l'exemple de le y@m's etait pas tres clair car il a utilise que des 0 et des 1.

    Par exemple 259 s'ecrit en binaire :

    [6 autres bytes] 00000001 00000011

    Et donc le tableau devra contenir :
    tab[0] = 3
    tab[1] = 1
    Et le reste des zeros.

  9. #9
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par Gfx
    En fait l'exemple de le y@m's etait pas tres clair
    désolé
    Citation Envoyé par Gfx
    Par exemple 259 s'ecrit en binaire :

    [6 autres bytes] 00000001 00000011

    Et donc le tableau devra contenir :
    tab[0] = 3
    tab[1] = 1
    Et le reste des zeros.
    exact, t'as tout compris malgré mes explications foireuses .

    Je vais étudier ton code

  10. #10
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Gfx, en fait ton code ne donne pas le résultat voulu mais le principe est le bon, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    byte[] b = new byte[8]; 
    for (int i = 0; i < b.length; i++) 
    {
         b[i] = (byte) l;
         l = l >> 8;
    }
    A priori c'est bon.
    Un grand à tous et en particulier à toi Gfx

  11. #11
    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 : 41
    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
    Points : 5 778
    Points
    5 778
    Par défaut
    Pour ceux que ça interesse voila le code pour faire l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static public final long bytesToLong(byte[] b)
    {
         long l = 0;
         for(int i = 0; i < 8; i ++)
         {
              l += ((256 + b[i]) % 256) * Math.pow(256, i);
         }
         return l;
    }
    @+

  12. #12
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Heu oui en effet, j'ai encore dit une connerie. La ligne correcte est :

    b[i] = (byte) ((l >> i * 8) & 0xFF);

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

Discussions similaires

  1. Convertir un long et un float en tableau de byte
    Par Kiruaa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 20/03/2013, 15h46
  2. [UDP] Conversion d'entier ou de long en byte[]
    Par joho dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/02/2006, 20h06
  3. [Question] Convertir un String en Byte
    Par WyckiT dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2005, 12h50
  4. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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