Comparaison d'unsigned char tout le temps fausse
Bonjour,
J'ai un soucis sur une comparaison entre deux unsigned char qui me donne des résultats inattendu.
Pour commencer, voici le code fautif :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| bool RectangleMap::contain(const int x, const int y) const
{
int pos = this->toFlattenIdx(x, y);
if( pos < 0 || pos >= this->length )
return false;
std::cout << pos << " -> " << this->map[pos] << " and we don't want " << static_cast<unsigned>(this->Blocked) << std::endl;
if( this->map[pos] == this->Blocked )
{
std::cout << "Good!" << std::endl;
return false;
}
std::cout << pos << " -> " << this->map[pos] << " Nieh!?!" << std::endl;
return true;
} |
Ici, this->map est de type : unsigned char* tandis que this->Blocked est de type unsigned char et vaut 0. La variable map contient uniquement des 0 ou des 1.
La fonction int toFlattenIdx(const int x, const int y) const prend deux coordonnées x et y et me renvoie l'indice correspondant dans le tableau aplati (map en l'occurence).
Les cout sont là pour déboguer.
Mon problème avec ce code, c'est que this->map[pos] == this->Blocked est tout le temps faux, même lorsque map[pos] vaut 0 (et est donc égale à Blocked).
Je ne comprend pas pourquoi. Les deux variables sont du même type, donc il n'y a pas de cast implicite qui pourrais intervenir....
Quelqu'un a t'il une idée ?
PS : y a t'il moyen d'utiliser la balise de code en mode "inline" ?