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

Java Discussion :

problème de conversion


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut problème de conversion
    bonjour,

    j'ai une chaine de caractère constituée de nombre hexadecimaux (chaque nombre est codé sur 8bits => donc deux caractères) . La longueur de cette chaine est variable.

    ex:":10D57000FBD70D01006B016B0E01E86BE96B0E012F"

    je dois faire :
    1- la somme de chaque nombre 10 + D5 + 70 + 00 + ...
    2- faire le complément A2 du résultat (on fait -1 au résultat puis on inverse les bits)
    3- afficher le dernier octet de l'opération => si le résultat vaut 1F54, je dois afficher la chaine "54"
    => je ne vois pas trop comment faire : comment dois-je procéder ?

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut

    je crois que tu devras utiliser les regex pour découper ta chaine en éléments de 2 caractères, ensuite pour chaque élément tu le convertis en int, et tu fais la somme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String str = "10D57000FBD70D01006B016B0E01E86BE96B0E012F";
    Pattern p = Pattern.compile("[a-fA-F-0-9]{2}");
    Matcher m = p.matcher(str);
    int somme = 0;
    while (m.find()) {
    	int x = Integer.parseInt(m.group(), 16);//16 c'est pour dire que la chaine est en héxadécimal
    	somme += x;
    }
    System.out.println(somme);
    pour le complément à 2, je crois que tu trouveras ton bonheur dans le méthode reverse de Integer, mais j'ai pas testé

    remarque: la somme est en décimal, pour avoir sa représentation hexadécimal, utilise Integer.toHexString(int i), et pour avoir les deux derniers caractères, utilise la méthode substring

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Merci beaucoup ça marche

    Par contre reverse n'a pas l'air de fonctionner => j'ai fait :
    => ça à l'air d'être bon : qqun peut confirmer ? il y a peut-être une methode plus propre

    et pour récupérer seulement les deux derniers caractères du résultat, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return resultat.substring(resultat.length() - 2);
    => c'est la meilleure méthode ?

  4. #4
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    pour le substring, je crois que c'est bon,

    pour le reverse, tu veux le complément à 2, et dans la doc de la méthode, ils disent
    Returns the value obtained by reversing the order of the bits in the two's complement binary representation of the specified int value.
    , c'est bien ce que tu veux?!!

    est-ce que c'est ça pour toi le complément à 2 ??

    complément à 2

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    oui la description de la methode reverse décrit bien ce que je veux faire mais lorsuqe je l'execute je n'ai pas le bon résultat (je n'ai peut être pas bien compris comment l'utiliser)

    Le complément A2 d'un nombre positif c'est normalement sont inverse 2 => -2, non (d'où ma feinte) ?

    sinon j'ai une autre petite question : quand j'utilise toHexString, comment faire pour être sur que la chaine comportera n éléments ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer.toHexString(0); // => vaut "0"
    Integer.toHexString(2); // => vaut "2"
    Integer.toHexString(255); // => vaut "FF"
    => je voudrais avoir le résultat sur 4 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "0000"
    "0002"
    "00FF"

  6. #6
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Le complément A2 d'un nombre positif c'est normalement sont inverse 2 => -2, non
    c'est pas du signe qu'il s'agit, mais des bits 1->0 0->1

    définition du complément à 2 sur wikipedia

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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