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 :

Conversion de bytes little endian en integer negatif


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut Conversion de bytes little endian en integer negatif
    Pour mon programme, je reçoit des données integer codées sur deux bytes (little endian). La conversion est simple tant qu'il s'agit de données positives.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Asc(premierbyte) + 256 * Asc(deuxièmebyte)
    Par contre, lorsqu'il s'agit de données négative, je me retrouve avec un dépassement de capacité. Quelqu'un saurait comment je peut faire pour obtenir le réultat sur un nombre négatif?

  2. #2
    Membre émérite Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Par défaut
    Tu aurais du rester sur ta question d'origine
    http://www.developpez.net/forums/d81...ur-port-serie/

    Mais ça prouve que tu as testé mon programme .....
    J'avais bien pensé au problème des nombres négatifs mais je n'avais pas testé une solution (on donne une idée de programme .... et ça tombe à l'eau !)

    Au pif, tu utilises un entier long sur 32 bit pour le calcul (donc pas d'erreur)
    Si le MSB du deuxième octet est un 1 (réception d'un entier court négatif) tu fais un OU du résultat avec &FF00&. On te donneras peut être d'autres solutions .....

    PS: Autres solution valable aussi (si ça marche ! ) avec des entiers longs
    - tu testes le bit de signe de l'octet MSB
    - C'est "0" OK, c'est positif
    - C'est "1" c'est négatif
    • Tu complémentes tous tes octets reçus avec un XOR &FF
    • Tu fais toutes tes multiplications et additions
    • Tu rajoutes "+1" au résultat (le résultat est alors la valeur positive de l'entier négatif reçu)
    • Tu changes de signe le résultat

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Je n'avais encore jamais travaillé sur des octets... Donc je ne sais pas comment récupérer le MSB. Tu aurais un lien vers une explication?

    En tout cas, merci pour ta réponse rapide. J'ai récupérer tous les élémens de la chaine d'infos, c'est seulement sur les derniers octets que je me suis aperçu que ces données pouvaient être négative quand sur un test j'ai eu le dépassement de capacité. Après un coup de fil au fabricant de l'automate, il m'a confirmé que les trois dernières données pouvaient être négatives.

  4. #4
    Membre émérite Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Par défaut
    Voila les 3 méthodes (la plus bonne la 3 ! qui est applicable à des entiers longs)

    PS: j'ai fait un truc pédagogique ... on peut regrouper certaines lignes
    Fichiers attachés Fichiers attachés

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Merci.

    Dois-je donc comprendre que MSB correspond à la valeur du deuxième byte et LSB à la valeur du premier.

    Quant à l'aspect pédagogique, merci, je préfère comprendre ce que je fais pour pouvoir le réutiliser face au même problème.

  6. #6
    Membre émérite Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Par défaut
    [ame]http://en.wikipedia.org/wiki/Least_significant_bit[/ame]

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Merci pour le lien, je comprends mieux maintenant.

Discussions similaires

  1. Conversion de little-endian à big-endian et inversement
    Par Le Farfadet Spatial dans le forum C++
    Réponses: 10
    Dernier message: 04/08/2011, 15h10
  2. Conversion Big Endian vers Little Endian
    Par tupac25 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2010, 16h40
  3. Problème de conversion 2 bytes en Integer
    Par MustOne dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2009, 10h17
  4. [6809] Documentation opcodes ? Big ou little endian ?
    Par krhamidou dans le forum Autres architectures
    Réponses: 2
    Dernier message: 21/01/2006, 16h17
  5. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08

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