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

Conversion en langage C



  1. #1
    flolarajasse

    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.

    -----
    Java is the best!

  2. #2
    flolarajasse

    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...
    Java is the best!

  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
    invite39886733

    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
    flolarajasse

    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;
    Java is the best!

  7. #6
    Bluedeep

    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).
    Dernière modification par Bluedeep ; 30/09/2015 à 14h27.

  8. #7
    flolarajasse

    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).
    Java is the best!

  9. #8
    Bluedeep

    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
    flolarajasse

    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?
    Java is the best!

  11. #10
    Bluedeep

    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
    flolarajasse

    Re : Conversion en langage C

    En effet, tu as raison. Merci Bluedeep
    Java is the best!

Discussions similaires

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