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 :

Shift logique dans un tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut Shift logique dans un tableau de char
    Bonjour,

    J'ai un tableau de 4 unsigned chars représentant un mot de 32 bits.
    Je cherche à effectuer un shift logique de n bits, n étant une variable mais je ne vois pas trop comment procéder:
    autant je vois comment faire ça pour un int, autant pour un tableau de char ???

  2. #2
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    le plus simple serait de définir une union pour pouvoir manipuler à la fois tes données comme un tableau de 4 char, et comme un int, et la pu de problème.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Merci, je ne connaissais pas du tout les unions.
    Je découvre quelque chose de pratique !!

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Du point de vue de la portabilité du code,

    1- Utiliser un unsigned int plutôt qu'un int

    2- On ne devrait pas utiliser une union de cette façon : écriture dans l'union avec un membre et lecture avec un autre.

    3- Plus grave (parce que le problème sera plus fréquent), le résultat de cette méthode dépend du boutisme. Or il existe de nombreuses machines à boutisme Big Endian et de nombreuses autres à boutisme Little Endian.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Alors quelle serait la bonne solution ?
    Je recontre justement le problem d'endianess :
    si je shift le mot 46 0a 00 00 de 13 bits vers la droite (>>), j'obtiens le mot 00 00 00 00
    ce qui ne correspond pas à la représentation que je me fais: je m'attends plutôt à obtenir
    40 00 00 00 et cela plutôt comme résultat d'un shift à gauche.
    Comment faire ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par oc_alex86 Voir le message
    Alors quelle serait la bonne solution ?
    Je recontre justement le problem d'endianess :
    si je shift le mot 46 0a 00 00 de 13 bits vers la droite (>>), j'obtiens le mot 00 00 00 00
    ce qui ne correspond pas à la représentation que je me fais: je m'attends plutôt à obtenir
    40 00 00 00 et cela plutôt comme résultat d'un shift à gauche.
    Le boutisme se fait au niveau de l'octet, pas du bit : l'ordre des octets est inversé en mémoire, mais le décalage des bits de chacun d'eux se fait quand même dans le bon sens. Vu du CPU, ton opération est en fait un « 00 00 0a 46 >> 13 ».

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

Discussions similaires

  1. Entrer une grille dans un tableau de char
    Par killersky4 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/01/2009, 16h41
  2. Intégrer une vaiable float dans un tableau de char
    Par NoritakaRomain dans le forum C
    Réponses: 2
    Dernier message: 14/05/2007, 15h19
  3. Copier un long dans un tableau de char?
    Par the_ionic dans le forum C
    Réponses: 15
    Dernier message: 29/06/2006, 09h31
  4. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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