Conversion en langage C
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Conversion en langage C



  1. #1
    invitead51e543

    Conversion en langage C


    ------

    Bonjour à tous,

    Je vous expose mon problème ; dans un de mes programme, il faut que je réalise l'opération suivante :

    - J'ai une variable sur 9 bits (donc qui peut prendre 512 valeurs différentes) ; mon but est de stocker cette variable en EEPROM. J'ai donc déclarer ma variable comme un unsigned int variable = 0. Je vais mettre dans la 1ère adresse EEPROM les 8 bits de poids faibles, et dans la deuxième adresse le bit de poids fort. Je ne savais pas trop comment procéder étant donné qu'il va falloir que je part d'un unsigned int pour obtenir un unsigned char.

    Pour l'adresse haute, afin de récupérer mon bit de poids fort, je pensais faire comme ceci :

    #define Adresse_High(x) ((unsigned int) (((x))&0x0001)) // Je garde mon bit de poids fort pour l'adresse haute

    Le soucis est que je vais obtenir un unsigned int. Comment le "transformer" en unsigned char?

    Même problème pour l'adresse basse.

    Merci d'avance pour vos réponses.

    -----

  2. #2
    invitead51e543

    Re : Conversion en langage C

    Erreur de ma part :

    #define Adresse_High(x) ((unsigned int) (((x))&0x0100)>>8) // Je garde mon bit de poids fort pour l'adresse haute

    Mais le problème reste toujours le même, j'ai un unsigned int alors que je souhaite avoir un unsigned char...

  3. #3
    pm42

    Re : Conversion en langage C

    Tu as essayé le bête cast :

    unsigned char c= (unsigned char) Adresse_High(x)

    P.S : ta signature est fausse. Java is the best à part C#, F#, Scala, Clojure, Python, Ruby, Haskell et autres

  4. #4
    invite71a6c60d

    Re : Conversion en langage C

    salut le jarsaire

    Je code comme ca perso:

    Code:
    uint8_t      Address_High , Address_Low ;
    
    Address_High = (uint8_t)(Address>> 8);
    Address_Low = (uint8_t)(Address);

  5. A voir en vidéo sur Futura
  6. #5
    invitead51e543

    Re : Conversion en langage C

    Salut à vous et merci de vos reps,

    N'y a t'il pas moyen de faire plus rapide que ça?

    Code:
    unsigned int adresse_h = 0;
    unsigned char adresse_haute = 0;
    
    #define Adresse_High(x) ((unsigned int) (((x))&0x0100)>>8)
    
    adresse_h = Adresse_High(adresse);
    adresse_haute = (unsigned char) adresse_h;

  7. #6
    invite0bbe92c0

    Re : Conversion en langage C

    Citation Envoyé par flolarajasse Voir le message
    Salut à vous et merci de vos reps,

    N'y a t'il pas moyen de faire plus rapide que ça?
    Une opération de shift est quasi instantanée (une seule instruction assembleur). On voit mal comment faire plus rapide.*En revanche, on vot pas le rapport avec le code posté (où vous forcez un bit à 1 avant le shiift).

  8. #7
    invitead51e543

    Re : Conversion en langage C

    Salut Bluedeep,

    Je sais que c'est rapide, je voulais juste savoir si il n'y avait pas moyen de faire autrement afin de ne pas passer par une variable intermédiaire (adresse_h).

  9. #8
    invite0bbe92c0

    Re : Conversion en langage C

    Citation Envoyé par flolarajasse Voir le message
    Salut Bluedeep,

    Je sais que c'est rapide, je voulais juste savoir si il n'y avait pas moyen de faire autrement afin de ne pas passer par une variable intermédiaire (adresse_h).
    Tu peux faire deux casts successifs dans ta macro.

  10. #9
    invitead51e543

    Re : Conversion en langage C

    Donc réunir :

    Code:
    #define Adresse_High(x) ((unsigned int) (((x))&0x0100)>>8) /
    et

    Code:
    adresse_h = Adresse_High(adresse);
    adresse_haute = (unsigned char) adresse_h;
    Comment fais tu?

  11. #10
    invite0bbe92c0

    Re : Conversion en langage C

    Citation Envoyé par flolarajasse Voir le message
    Comment fais tu?
    Pas de compilo C sous la main, mais :
    Code:
    #define Adresse_High_uchar(x) ( (unsigned char) (unsigned int) (((x))&0x0100)>>8) /
    n'a pas de raison de ne pas marcher, peut être avec un niveau de parenthèse en plus style :
    Code:
    #define Adresse_High_uchar(x) ( (unsigned char) ((unsigned int) (((x))&0x0100)>>8)) /

  12. #11
    invitead51e543

    Re : Conversion en langage C

    En effet, tu as raison. Merci Bluedeep

Discussions similaires

  1. Explications programme conversion langage c
    Par invitefa13e265 dans le forum Programmation et langages, Algorithmique
    Réponses: 25
    Dernier message: 05/01/2015, 09h51
  2. Langage c conversion binaire hexa
    Par invitecee01c25 dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 30/12/2014, 15h50
  3. conversion d'un tableau(langage C)
    Par invitefa15af9f dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 08/04/2012, 15h06
  4. conversion ASCII-HEX langage c
    Par invite73838812 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 24/11/2010, 10h14
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...