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

VB 6 et antérieur Discussion :

Travailler avec des hexadécimaux


Sujet :

VB 6 et antérieur

  1. #1
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut Travailler avec des hexadécimaux
    Bonjour, je bûche sur un problème où je dois travailler avec la valeur hexadécimale suivante :
    9E3779B9

    que j'ai noté dans mon code :

    &H9E3779B9

    or lorsque j'affiche la valeur en question je récupère la valeur : -1640531527

    qui correspond à la valeur hexa : FFFFFFFF 9E3779B9
    j'imagine que cela a à voir avec les nombres signés ou non. Mais est ce que quelqu'un pourrait m'expliquer comment m'y prendre pour traiter avec la valeur que je veux codé en hexa ?

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Tu l'as déclaré comme étant un Integer ou un Long ?

    Long, surement. Un Long ne contient que quatre octets signés
    (-2 147 483 648 to 2 147 483 647).
    Ton nombre hexa (&H9E3779B9) représente 2 654 435 769 en décimal positif ce qui est au delà des capacités d'un long. Voilà pourquoi il te renvoie un entier négatifs. Le 32e bit (de droite à gauche) est un 1, donc tu as un nombre négatif!

    En VB6! Sais pas pour VB.NET. En Delphi on a des Int64 (sur 64bits) qui semblent pouvoir afficher des entiers positifs un peu plus grands (un peu... Ha!) Ce n'est pas le cas de VB6, malheureusement.

  3. #3
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    un long, avec un integer je provoquerai une erreur de dépassement de capacité non ?

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    J'ai édité mon message comme tu répondais...

    J'ai pas l'impression de pouvoir t'aider d'avantage.

    Désolée.

    Y en a-t-il de plus cracs que moi qui connaissent une astuce ?

  5. #5
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Ok c'est déjà un début d'explication
    Je code effectivement en VB6...
    Merci. Mais malheureusement, je ne vois toujours pas où cela me mène ...

  6. #6
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    effectivement, 9E3779B9 en hexa
    valant en binaire 1001 1110 0011 0111 0111 1001 1011 1001
    comme il considère un long sur -2 147 483 648 et 2 147 483 647
    il estime donc que la valeur de ta variable est -1640531527

    néantmoins, ce n'est qu'une interprétation décimal d'un nombre binaire, je ne vois pas ou est ton problème !!!

    Qu'est-ce qui te gène ?
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
    (Albert Einstein)

  7. #7
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    J'aurais souhaité affiché la valeur décimale réelle que ma valeur hexadécimale représentait et qui était : 2654435769.
    Mais apparremment d'après ce que je comprend comme il n'y a pas un type de donnée ayant une capacité assez grande, la valeur qui m'est retournée est négative car lorsque l'on dépasse la capacité maximum en positif on reprend le décompte en commençant par la borne négative, c'est ça?

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En effet, on a le droit à des erreurs de dépassement de capacité, tu peux par contre t'écrire une fonction qui transcrit un hexa en single

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function ConvertHex(strNb As String) As Single
    Dim i As Integer
    For i = 0 To Len(strNb) - 1
    ConvertHex = ConvertHex + CInt("&H" & Mid(strNb, Len(strNb) - i, 1)) * (16 ^ i)
    Next
    End Function

  9. #9
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Merci tofalu pour la fonction en effet elle me permet d'afficher approximativement le résultat que j'escomptais.

  10. #10
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut les mecs

    Personnellement, je trouve un peu em...dant que VB ne permette pas de plus grande valeur de type Integer.

    Chapeau Tofalu. J'enregistre ta fonction quelque part. On ne sait jamais, ça peut servir!

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

Discussions similaires

  1. [VBA] Requête + date pour travailler avec des recordsets
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 14/08/2006, 15h15
  2. Travailler avec des gifs animés
    Par Commodore dans le forum Imagerie
    Réponses: 1
    Dernier message: 13/07/2006, 15h58
  3. Réponses: 8
    Dernier message: 09/03/2006, 17h48
  4. Réponses: 3
    Dernier message: 25/01/2005, 11h27
  5. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 19h09

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