concaténer deux int8_t d'un tableau
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

concaténer deux int8_t d'un tableau



  1. #1
    docEmmettBrown

    concaténer deux int8_t d'un tableau


    ------

    Bonjour,

    voila je recois un tableau de type uint8_t et la concaténation avec tab[0] et tab[1] donne une valeur en uint16_t et ainsi de suite.

    j'ai fait :
    Code:
    unit16 *tab16;
    [...]
    tab16[0] = ( tab8[0] << 8 ) | tab8[1] ;
    et ca marche tres bien dans une boucle je récupere bien toutes mes valeurs. Je voulais savoir s'il y a une deuxiemes méthodes pour concaténer 2 uint8_t. Mon prof d'info dit qu'il y a une deuxième méthodes mais je trouve pas sur le net donc je me tourne vers vous

    Merci d'avance pour votre aide.

    -----

  2. #2
    Jack
    Modérateur

    Re : concaténer deux int8_t d'un tableau

    La norme garantissant que les octets sont bien contigus dans un tableau, il suffit peut-être de copier les 2 octets de tab8 dans tab16 à l'aide d'un memcpy.

    En tout cas, que ce soit avec cette méthode ou la tienne, ce code n'est pas portable car ne tenant pas compte de l'endianness.

  3. #3
    pm42

    Re : concaténer deux int8_t d'un tableau

    Citation Envoyé par Jack Voir le message
    La norme garantissant que les octets sont bien contigus dans un tableau, il suffit peut-être de copier les 2 octets de tab8 dans tab16 à l'aide d'un memcpy.

    En tout cas, que ce soit avec cette méthode ou la tienne, ce code n'est pas portable car ne tenant pas compte de l'endianness.
    Oui. On peut aussi le faire en castant un pointeur sur l'int8 en pointeur sur l'int16. C'est sans doute ce qu'il y a de plus rapide mais aussi de plus moche et risqué.
    Sinon, on peut remplacer les opérations sur les bits par une multiplication et une addition mais il n'y a pas d'intérêt (sauf quand on utilise un langage qui n'a pas l'équivalent de << et |).

  4. #4
    Ludwig1

    Re : concaténer deux int8_t d'un tableau

    Citation Envoyé par docEmmettBrown Voir le message
    Bonjour,

    voila je recois un tableau de type uint8_t et la concaténation avec tab[0] et tab[1] donne une valeur en uint16_t et ainsi de suite.

    j'ai fait :
    Code:
    unit16 *tab16;
    [...]
    tab16[0] = ( tab8[0] << 8 ) | tab8[1] ;
    et ca marche tres bien dans une boucle je récupere bien toutes mes valeurs. Je voulais savoir s'il y a une deuxiemes méthodes pour concaténer 2 uint8_t. Mon prof d'info dit qu'il y a une deuxième méthodes mais je trouve pas sur le net donc je me tourne vers vous

    Merci d'avance pour votre aide.
    Salut,

    Tu multiplies tab8[0] par 256 puis tu additionnes tab8[1],
    puis tu ranges le résultat dans uint_t[x...]
    il me sembles que ça devrai marcher dans tous les langages A vérifier.

    Cordialement

    Ludwig
    Dernière modification par Ludwig1 ; 21/06/2017 à 08h59.

  5. A voir en vidéo sur Futura
  6. #5
    Chanur

    Re : concaténer deux int8_t d'un tableau

    Citation Envoyé par Jack Voir le message
    La norme garantissant que les octets sont bien contigus dans un tableau, il suffit peut-être de copier les 2 octets de tab8 dans tab16 à l'aide d'un memcpy.

    En tout cas, que ce soit avec cette méthode ou la tienne, ce code n'est pas portable car ne tenant pas compte de l'endianness.
    Non, tu te trompes, Jack.
    Le memcpy n'est pas portable à cause de l'indianness, mais par définition, les opérateurs de décalage << et >> agissent sur la représentation binaire de l'entier considéré, quelque soit le disposition des bits et des octets en mémoire et sont donc portables.
    x << 1 signifie toujours x*2, pour x entier, quelque soit son type.

    Une autre façon encore (et qui dépend aussi de l'indianness) serait une union :
    Code:
    union
        {
        unsigned char octet[2];
        uint16_t deux_octets;
        } * tab16;
    et :
    tab16[0].octet[0] = tab8[0];
    tab16[0].octet[1] = tab8[1];
    
    tab16[0].deux_octets contient la concaténation des deux
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  7. #6
    Jack
    Modérateur

    Re : concaténer deux int8_t d'un tableau

    mais par définition, les opérateurs de décalage << et >> agissent sur la représentation binaire de l'entier considéré, quelque soit le disposition des bits et des octets en mémoire et sont donc portables.
    Je n'avais pas pensé à cet aspect du fonctionnement de l'opérateur de décalage en effet.

Discussions similaires

  1. tableau de deux dimensions
    Par invitea0ff9272 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 04/12/2013, 10h18
  2. VBA:Concaténer les enêtes de colonne et de ligne d'un tableau dans une 2nd feuille
    Par invite520654aa dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 20/12/2012, 12h29
  3. Tableau de variation, deux courbes correspondantes ?
    Par inviteefc0711f dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 22/11/2009, 18h58
  4. moyenne de deux tableau
    Par invite4c59a29d dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 06/10/2008, 17h42
  5. [molécules 3D] concaténer deux molécules
    Par invite940392f5 dans le forum Chimie
    Réponses: 0
    Dernier message: 12/10/2004, 08h00