2013-03-16 5 views
-1

J'ai deux chaînes dont une avec un entier (par exemple strInt = "100") et une avec un nombre hexadécimal (par exemple, chaîne strHex = "0x64"). Quel est le moyen le plus rapide/agréable/sûr de comparer si les valeurs de strInt et strHex sont égales (numériquement)?La méthode la plus simple pour comparer une chaîne contenant un entier contenant une chaîne hexadécimale

nécessité d'exclure sprintf pour éviter le débordement de la mémoire tampon utilisation également dévers snprintf - mon compilateur ne prend pas en charge C++ 11

Merci à tous à l'avance

+0

l'information critique est ici nombre de chiffres, et vous avez quitté que sur –

+0

Bien sûr, cela doit être fait en C++ :) – marcin

+0

Le format hexadécimal est 0xyyyyy - donc 5 chiffres – marcin

Répondre

2

Utilisez strtol pour convertir à la fois en entier, puis de les comparer. Vous pouvez utiliser strHex.c_str() pour convertir une chaîne C++ en la chaîne de style c requise par strtol.

Exemple:

long int numHex = strtol(strHex.c_str(),NULL,16); // 16 is the base of the source 

long int numInt = strtol(strInt.c_str(),NULL,10); 
+0

+1 la solution saine –

3

Je ne vois pas comment la fonction sprintf() ou snprintf() serait nécessaire pour cela.

std::string a = "1337"; 
std::string b = "0x539"; 

std::stringstream as; 
as.str(a); 
std::stringstream bs; 
bs.str(b); 

int na, nb; 
as >> na; 
bs >> std::hex >> nb; 

std::cout << a << " is " << (na == nb ? "equal" : "not equal") << " to " << b << std::endl; 
+0

Je pensais à le faire de cette façon - mais est-ce optimal? On dirait que beaucoup de mémoire sera nécessaire pour créer deux strings juste pour comparer deux nombres ??? – marcin

+1

@marcin Regardez comment la réponse suggérant l'utilisation de 'strtol()' sera bientôt downvotée massivement: P Si vous avez un bon compilateur d'optimisation, cela ne devrait pas poser de problème, et l'utilisation du code C++ est généralement préférable à C vous écrivez quelque chose en C++. –

+0

@ H2CO3 Vous voulez expliquer pourquoi? (Honnêtement, je ne sais pas, je ne l'aurais pas suggéré autrement) –

Questions connexes