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

C++Builder Discussion :

Obtenir la représentation hexa d'un décimal (conversion d'heure)


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut Obtenir la représentation hexa d'un décimal (conversion d'heure)
    Salut à tous,
    J'ai besoin de convertir une valeur décimale en une chaine de type hexa. Je m'explique :
    Je reçois dans une trame une valeur représentant des minutes. Cette valeur est de type unsigned char soit 0x10 ou 16 lorsque je cast cette valeur en int.
    Mon problème est que j'aimerais récupérer la valeur 10, qui correspond à mes minutes réelles, sous forme d'integer ou d'ansistring peu importe.
    Savez vous comment faire ça ?
    Merci d'avance

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Ce que tu cherches s'appelle une représentation BCD ([ame="http://fr.wikipedia.org/wiki/Binary_coded_decimal"]BCD[/ame]) du nombre, c'est souvent utilisé avec les afficheurs et les horloges temps réel.

    Je n'ai pas l'API BCB en tête, mais cherche "BCD" dans l'aide de BCB, il doit y avoir des fonctions de conversion déjà existantes : du moins, il me semble bien en avoir déjà vu avec Delphi...
    Sinon, au pire, c'est facile à recalculer une fois que l'on sait comment c'est codé, ou à chercher sur le net avec le terme correct.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    Merci Mac Lak je vais chercher de ce coté là

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si c'est du BCD dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UINT v; // ou au minimum BYTE v;
    UINT d;
    UINT u;
    // extraction du digit des unités
    u = v & 0xF;
    // extraction du digit des dizaines (avec masque au cas où)
    d = (v / 16) & 0xF;
    // la valeur finale :
    n = (d * 10) + u;
    Pour effectuer l'extraction sur un BCD plus large, on extrait les digits au fur et à mesure en procédant par décalages successifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    u = v & 0xF; v = v / 16; // prêt pour extraire d
    d = v & 0xF; v = v / 16; // prêt pour ...
    sec = u + (d * 10);
    //...etc...
    La division par 16 est équivalente à un shift de 4 bits ( >> 4).

    A plus !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il y a une unité FMTBCD, et un type TBcd qui font cela.

    Pour convertir un BCD en entier, il y a des fonctions BcdToInteger(), et inversement IntegerToBcd(), et même un FormatBcd() qui ressemble furieusement au FormatFloat() usuel... ^

    Et puis toutes sortes de fonctions qui permettent de faire des calculs sur des nombres stockés en Bcd (si tes données d'origine ont cette forme, il n'est pas forcément nécessaire de les convertir)

    Francois

  6. #6
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    Je m'en suis sorti avec le calcul de henderson. Merci à tous pour votre aide

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

Discussions similaires

  1. Obtenir la représentation en base N d'un entier
    Par Vincent PETIT dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h01
  2. Réponses: 42
    Dernier message: 22/09/2010, 12h57
  3. Convert String represent Hexa en valeur Décimal
    Par gdev7 dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2008, 11h55
  4. [debutant] obtenir la représentation binaire d'un code ascii
    Par coco21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/11/2007, 09h06
  5. Représentation hexa d'un nombre négatif
    Par sone47 dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/02/2007, 17h26

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