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 :

[conversion] byte en Hex


Sujet :

Langage Java

  1. #1
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 317
    Points
    317
    Par défaut [conversion] byte en Hex
    Bonjour,

    Pourriez vous m'aider sur la conversion d'un byte e hexadecimal svp...
    J'ai un petit soucis entre le départ et l'arrivée :

    Voici le code permettant de tranformer le contenu d'un fichier en hexadecimal :

    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
     
    StringBuffer retour = new StringBuffer();
    FileInputStream f = new FileInputStream(getFichier());
     
    int car;
    int i=0;
    while ((car=f.read())>=0)
    if (Integer.toHexString(car).length() !=2)
    {
    	if (i++<40) System.out.println("0"+Integer.toHexString(car));
    	retour.append("0" + Integer.toHexString(car));
    }
    else
    {
    	if (i++<40) System.out.println(Integer.toHexString(car));
    	retour.append(Integer.toHexString(car));
    }
    Voici les 40 1ers caractères :
    [code]
    50
    4b
    03
    04
    14
    00
    00
    00
    08
    00
    90
    61
    c8
    34
    f3
    aa
    f4
    8d
    cb
    [code]

    Mon code permettant de recuperer ce code à partir de la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    blob = (byte[]) q.getResultat().next().get(0);
     
    for (int i=0; i<40; i++)
    	System.out.println(Integer.toHexString(new Byte(blob[i]).intValue()));
    Et la ... surprise... j'ai :

    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
     
    50
    4b
    3
    4
    14
    0
    0
    0
    8
    0
    ffffff90
    61
    ffffffc8
    34
    fffffff3
    ffffffaa
    fffffff4
    ffffff8d
    ffffffcb
    Quelqu'un pourrait m'expliquer svp, parce que là je m'arrache les cheveux !

    Merci

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    C'est normal...

    1, en binaire c'est codé 00000....0000001
    -1, c'est codé 11111....1111111

    (complément à 2, tu inverses tous les bits tu ajoutes 1)

    -1, si tu es sur 1 octet, ça fait 11111111, donc ff.
    sur 2 octets, ça fait ffff.
    sur 4 octets, ça fait ffffffff.

    Voilà l'explication...

    Après, je ne sais pas trop ce que tu veux faire avec ça...

  3. #3
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 317
    Points
    317
    Par défaut
    Voui jusque là je suis d'accord avec toi, mais pourquoi d'un 90(16) il passe à FFFFFF90(16) ?
    Je vois pas d'ou peut venir l'inversion de signe sur certains 'byte' ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Points : 77
    Points
    77
    Par défaut
    Dans to code tu manipules des "int", il faudrait que tu manipules des "byte"

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par if_zen
    Voui jusque là je suis d'accord avec toi, mais pourquoi d'un 90(16) il passe à FFFFFF90(16) ?
    Je vois pas d'ou peut venir l'inversion de signe sur certains 'byte' ...
    Parce que 0x90 sur 1 octet, ça fait 1001 0000, c'est à dire - 0111 0000, -0x70.
    C'est un nombre négatif.
    Quand tu le passes sur 4 octets... ça met des FF

    En fait, un byte, c'est pas entre 0 et 255, mais de -128 à 127 (tout est signed en java)

Discussions similaires

  1. conversion Byte[] vers int
    Par skud dans le forum C#
    Réponses: 5
    Dernier message: 17/05/2007, 12h14
  2. Réponses: 20
    Dernier message: 11/07/2006, 17h43
  3. Conversion byte [] -> String
    Par MiJack dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 18h16
  4. Conversion Byte en octets, Mo, Go
    Par elitost dans le forum Général Java
    Réponses: 7
    Dernier message: 27/09/2005, 13h48
  5. [C++.NET] Conversion Byte*/Byte[]
    Par SteelBox dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 13/02/2005, 19h12

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