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++ Discussion :

time_t et unsigned long


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 49
    Par défaut time_t et unsigned long
    Bonjour,

    Je dois effectuer des mouvements de bits sur des variables comme time_t et j'avoue ne pas trop savoir comment time_t se comporte...
    Ainsi j'ai deux variables une appelée a du type time_t d'une valeur de 0x4eba4cfa
    et une valeur b de type unsigned long size de valeur 0x7EA
    Je dois utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    unsigned char DEFAULT = 0xaa;
    unsigned char endecode (time_t a, unsigned long b)
    {
          unsigned char d (0);
          _int64 a_b ((static_cast<_int64> (a) << 32) + b);
          while (a_b != 0 && d == 0)
          {
                d = static_cast<unsigned char>(a_b & 0x0ff);
                a_b >>= 8;
          }
          return static_cast <unsigned char> (d != 0 ? d :
          DEFAULT);
    }
    Combien doit-on trouver ? Sachant que d est après utilisé comme une variable signé 16 bits
    Car en faisant le calcul de tête j'obtiens : 0x4cFA Or je sais que le résultat attendu serait plutôt 0xFAFA...
    Obtenez vous le même résultat que moi ? (je n'arrive pas à faire tourner ce programme sous code blocks, c'est pour cela que je le fais de tête). Est-ce time_t qui ne se comporte pas comme un unsigned long 32 normal ?
    Merci de votre aide

    Magicsmacks

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Le déroulement si j'ai bien compris :
    a_b = (0x4eba4cfa) << 32 => 0x4eba4cfa00000000
    a_b = 0x4eba4cfa00000000 + 0x000007EA = 0x4eba4cfa000007EA
    d = 0x4eba4cfa000007EA & 0x00000000000000FF = 0xEA
    a_b != 0 mais d != 0 => break
    return 0xEA

    Comment arrives-tu à un chiffre de 2 octets pour la variable d ?
    Si on suit ton algo c'est impossible vu que l'opération & se fait sur 2 octets à '1'.

    Après je peux me tromper, c'est pas parce qu'hier était un jour de congé que je suis pas fatigué cet après-midi.

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 49
    Par défaut
    Alors tout d'abord j'ai inversé les valeurs de a et de b...
    Après pour le déroulement je suis ok avec toi...
    Du coup je trouve de tête effectivement 0xFA...
    Mais a priori il faudrait trouver 0xFAFA...
    Mais je voyais mal comment cela était possible d'autant plus que le déplacement de bit se fait vers la droite si la boucle ne se casse pas...
    Le fait que a soit une valeur time_t ne modifie pas sa valeur en hexadécimal ? En fait c'était la seule explication que je voyais de plausible...
    En tout cas merci pour l'avis

    Magicsmacks

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Si tu veux 2 octets dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d = static_cast<unsigned char>(a_b & 0xffff);
    a_b >>= 16;
    Ou bien revoir la condition de ta boucle.

Discussions similaires

  1. unsigned long vers time_t
    Par turbo_chess dans le forum C
    Réponses: 2
    Dernier message: 28/09/2007, 14h45
  2. Réponses: 1
    Dernier message: 07/05/2007, 20h12
  3. unsigned long long int
    Par salseropom dans le forum C
    Réponses: 10
    Dernier message: 21/12/2006, 22h43
  4. petit probleme avec un (unsigned long int)
    Par Micks71 dans le forum C
    Réponses: 6
    Dernier message: 19/05/2006, 12h08
  5. Réponses: 6
    Dernier message: 06/12/2005, 16h54

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