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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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