2008-11-02 8 views
2

Si j'ai une gamme de dire 000080-0007FF et je veux voir si un char contenant hex est dans cette gamme, comment puis-je le faire?Vérifiez si Char est dans la gamme

Exemple

char t = 0xd790; 

if (t is within range of 000080-0007FF) // true 

Répondre

8
wchar_t t = 0xd790; 

if (t >= 0x80 && t <= 0x7ff) ... 

En C++, les caractères sont interchangeables avec des nombres entiers et vous pouvez comparer leurs valeurs directement.

Notez que j'ai utilisé wchar_t, car le type de données char ne peut contenir que des valeurs allant jusqu'à 0xFF.

+0

Je l'ai essayé et je reçois avertissement: la comparaison est toujours fausse en raison de la plage limitée de type de données Ok il suffit de lire votre correctif – BobS

+0

Il semble que votre compilateur est configuré pour interpréter 'char' comme un type de données signé (qui va de -128 à 127). Utilisez wchar_t comme j'ai édité ma réponse. –

+0

Existe-t-il un autre moyen que wchar_t? – BobS

3
unsigned short t = 0xd790; 

if (t >= 0x80 && t <= 0x7ff) ... 

Depuis char a une valeur maximale de 0xFF vous ne pouvez pas l'utiliser pour comparer quoi que ce soit avec plus de chiffres hexadécimaux que 2.

0

Depuis six pans sur un ordinateur est rien de plus qu'un moyen d'imprimer un nombre (comme décimal), vous pouvez également faire votre comparaison avec de simples entiers de base 10 vieux.

if((t >= 128) && (t <= 2047)) 
{ 
} 

Plus lisible.

+0

Non, je ne suis pas d'accord. Les valeurs hexadécimales sont plus lisibles. Vous pouvez voir les modèles de bits à partir des valeurs hexadécimales. –

+0

La lisibilité dépend entièrement du contexte. Si les configurations de bits sont pertinentes pour le problème en question, l'hexagone est plus lisible (il s'agit vraisemblablement du cas de l'OP). Si les nombres représentent quelque chose comme des comptes normaux d'éléments, la décimale est plus lisible. –

Questions connexes