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 :

Concaténation octets en uint32


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut Concaténation octets en uint32
    Bonjour,

    Je suis confronté à un petit problème qui est sans doute tout bête, mais j'ai la tête un peu dans le guidon, et je ne vois du coup pas d'où vient de problème.
    Je récupère un tableau de uint8_t (des octets non signés) et je veux les concaténer pour obtenir un uint32_t (double word non signé).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    spi_write_read(write_buffer, 4, receive_buffer, 4, 4); // remplit receive_buffer avec 4 octets
    retour = ((uint32_t)(receive_buffer[0]) << 24) | ((uint32_t)(receive_buffer[1]) << 16) | (receive_buffer[2] << 8) | receive_buffer[3];// concatène les 4 octets pour en faire un gros mot
    Cela semble fonctionner lorsque receive_buffer[0] et [1] sont nuls...
    Mais dès lors qu'il ne le sont pas, la concaténation donne : 0xFFFF3210 par exemple, alors que retour devrait valoir : 0x01903210

    Merci pour vos réponses qui seront éclairantes

    À plus

  2. #2
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut Erreur toute bête
    Bon, en fait, il s'agissait comme je le pressentais, d'une erreur toute bête (en même temps, il est rare qu'un erreur soit intelligente).
    Il faut caster tout les termes...
    Le code fonctionnel est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = ((uint32_t)(receive_buffer[0]) << 24) | ((uint32_t)(receive_buffer[1]) << 16) | ((uint32_t)(receive_buffer[2]) << 8) | (uint32_t)(receive_buffer[3]);
    À plus

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

Discussions similaires

  1. Concaténer une chaine à un octet nul ?
    Par Morrigan dans le forum Débuter
    Réponses: 12
    Dernier message: 12/12/2008, 14h06
  2. Concaténation vertical ???
    Par loaded dans le forum Langage SQL
    Réponses: 10
    Dernier message: 07/05/2003, 15h44
  3. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 12h30
  4. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26
  5. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 17h03

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