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

avec Java Discussion :

Récupérer un int à partir d'un byte


Sujet :

avec Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut Récupérer un int à partir d'un byte
    Bonjour,

    dans un fichier binaire je récupère des données codées en ASCII. Pour le moment j'utilise une ligne de code plutôt lourde pour transformer par exemple un 52 en 4 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = Integer.parseInt(new String(new byte[]{monByte}));
    N'y a-t-il pas plus simple ou plus "propre" ? N'y a-t-il pas une méthode de la classe Integer qui le permette directement ?

    Merci
    Mieux vaut un petit lien qu'un long discours.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Peut-être avec Character.digit() ???


    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    monByte est la valeur en base 10 d'un octet. Si je le passe directement en int je me retrouverais avec des valeurs allant de 48 à 57 (ce qui représente de 0 à 9). Je pourrais faire une soustraction directement mais de ce que j'ai compris des langages objet le but c'est quand même d'éviter ce genre de sorcellerie.

    Le problème de la méthode digit() c'est qu'elle prend en paramètre un char. Le pire c'est qu'en faisant l'inverse, un char dans un byte, ça fonctionne très bien.
    Mieux vaut un petit lien qu'un long discours.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Plus propre, non. (Enfin, si :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = Integer.parseInt(new String(new byte[]{monByte}, "us-ascii"));
    'faut préciser l'encodage. On sait jamais.)

    Plus simple, oui : exactement ce que tu as dit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(monByte < '0' || monByte > '9') {
      throw new IllegalArgumentException("Byte does not represent an ascii decimal digit: " + monByte );
    }
    int i = monByte - '0';
    De toute façon, quand on lit des formats binaires, on a pas toujours le choix. Si c'est un octet dont le but est de représenter un et un seul caractère ASCII qui est un chiffre de 0 à 9, ceci est probablement la bonne manière de le lire.
    Bon, à organiser dans une classe de lecture du format binaire en question, pour pouvoir s'en abstraire assez vite, quand même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas le problème avec Character.digit() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = Character.digit(monByte, 10);

    a++

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je ne vois pas le problème avec Character.digit() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = Character.digit(monByte, 10);
    Ah, oui, tiens.
    D'habitude je n'aime pas Character.digit() parce que ça accepte n'importe quel caractère unicode représentant un chiffre, et pas seulement les 0 à 9 ASCII.
    Mais dans le cas présent ce n'est pas un problème, en fait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je ne vois pas le problème avec Character.digit() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = Character.digit(monByte, 10);

    a++
    Bidiou ça marche niquel.

    Par contre je suis quand même surpris du fait que la méthode prend comme paramètre un char et qu'en passant un byte sans le caster ça fonctionne.

    Mais comme on peut seter un char dans un byte sans le caster peut-être est-ce normal après-tout ...

    Merci pour tout.
    Mieux vaut un petit lien qu'un long discours.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    Par contre je suis quand même surpris du fait que la méthode prend comme paramètre un char et qu'en passant un byte sans le caster ça fonctionne.
    Il y a deux méthode digit(). La seconde utilise un int en premier paramètre, et le cast de byte vers int ne pose aucun problème dans ce sens


    a++

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Ok ce qu'ils appellent codePoint c'est la valeur Unicode.

    Merci encore une fois.
    Mieux vaut un petit lien qu'un long discours.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/03/2007, 17h32
  2. Récupérer des floats à partir d'une string
    Par hamster dans le forum SL & STL
    Réponses: 8
    Dernier message: 09/06/2005, 08h10
  3. [JTree] Récupérer le modèle à partir de la sélection
    Par bizerta dans le forum Composants
    Réponses: 7
    Dernier message: 08/06/2005, 13h18
  4. Réponses: 11
    Dernier message: 08/04/2005, 11h20
  5. Réponses: 3
    Dernier message: 24/09/2004, 21h21

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