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 :

double cast ?


Sujet :

C++

  1. #1
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut double cast ?
    Bonjour,

    J'ai unsigned char* qui décrit les pixels noir et blanc d'une image (donc suite de 0 et 255).

    Je l'affiche sur la sortie standard pour un contrôle et ... si je ne caste pas mon "image" doublement comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (int) (unsigned char) *(image + pixel);
    Les valeurs en sortie ne sont pas 0 ou 255. j'ai essayer just un cast (int), les valeurs retournée sont -1 et 0, avec (unsigned int) 4254967295 et 0...

    Je n'ai plus de souvenir sur le codage des nombres négatif en binaire etc. donc si quelqu'un pouvait me rafraichir la memoire et me donner un cast plus élégant.

    (j'ai egalement essayé static_cast<int>)

    Merci
    Avant de poser une question, lire la Avant de répondre, lire la question

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    je suppose que image est un tableau de char, et pour cela, le plus élégant est de passer par un unsigned char.
    Soit avec un cast, soit avec une affectation à une variable temporaire (il me semble bien qu'affecter un nombre à un autre ne différent que par le signe est accepté sans warning par les compilateurs.

    (L'autre façon étant un ET bit-à-bit (opérateur &) entre ton int et la valeur 0x000000FF)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    4254967295 c'est la valeur maximum d'un entier non signé codé sur 32 bits.
    Quel est le type de pixel ?

  4. #4
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    image est deja un tableau de unsigned char !!!

    Oui effectivement, c'est la valeur max que prend un entier sur 32 bits en entier non signé... et cela doit correspondre à la valeur -1 en entier signé (mon intution mêlé a quelques souvenirs... me contredire tout de suite si grosse connerie). Mais alors pourquoi se permet il de convertir un unsigned char de valeur 11111111 en entier 1111.....11111. Il devrait normalement faire un 00...0011111111 (pixel une composante 8bit de 0 a 255... bref un unsigned char...)

    Oui faire une operation en logique binaire serait la maniere la plus clean de resoudre le probleme.... QUI N A PAS LIEU D ETRE
    Avant de poser une question, lire la Avant de répondre, lire la question

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu es certain que image est bien un tableau de unsigned char ?

    Si c'est le cas en effet, d'une part il ne devrait pas y avoir d'extension de signe, d'autre part le cast ne devrait rien changer. À ce moment-là, si tu es vraiment en unsigned char, tu peux changer de compilo.

    PS: Est-ce que ça fait le même problème en utilisant simplement au lieu de ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Oui c bien la meme avec un accés en aux données ... Bon, reste a verifier effectivement que les données sont conformes à la doc de la lib, cad des unsigned char (ça me ferait bien mal qu'opencv utilise autre chose que des unsigned char pour des pixels une composante 8 bits... surtout après l'avoir écrit noir sur blanc)

    HAAAAAAAAAAAA... je viens de contrôler... ce sont des char
    Saloperie de lib qui raconte n'imorte nawoik.

    Merci a tous
    Avant de poser une question, lire la Avant de répondre, lire la question

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

Discussions similaires

  1. Double cast inutile..ou pas?
    Par eatherquake dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 15/10/2010, 22h43
  2. Réponses: 1
    Dernier message: 26/04/2010, 11h03
  3. [Requete] Probleme avec double jointure et cast
    Par guromgd dans le forum Développement
    Réponses: 5
    Dernier message: 04/05/2009, 13h42
  4. Vector et cast en double
    Par javamax dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2007, 21h21
  5. cast de double en int
    Par ensisoft dans le forum C++
    Réponses: 7
    Dernier message: 13/12/2005, 12h23

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