Considérez la tâche de conversion d'une représentation sous forme de chaîne hexadécimale d'un nombre en un entier signé de 32 bits. Par exemple, la chaîne hexadécimale « fffefffe » se traduit par 11111111111111101111111111111110 en binaire, représentant l'entier signé -65538. De plus, nous devons gérer à la fois les nombres positifs et négatifs, tels que "0000000A" (binaire : 0000000000000000000000000001010 ; décimal : 10).
Exploiter le std : :classestringstream, la conversion le processus devient simple :
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
En extrayant l'entier du flux, nous obtenons la représentation entière signée 32 bits de la chaîne hexadécimale.
Lexical_cast de Boost : gestion des erreurs (Discontinué)
Remarque : comme indiqué dans la réponse source, l'approche lexical_cast de Boost a été abandonnée au profit des nouvelles fonctions C 11.
Boost fournit également une solution pratique qui intègre vérification des erreurs :
try { unsigned int x = lexical_cast<int>("0x0badc0de"); } catch(bad_lexical_cast &) { // Handle conversion error }
Lexical_cast personnalisé : implémentation simple sans erreur Vérification
Pour ceux qui n'utilisent pas Boost, une version simplifiée de lexical_cast peut être utilisée sans gestion des erreurs :
template<typename T2, typename T1> inline T2 lexical_cast(const T1 &in) { T2 out; std::stringstream ss; ss << in; ss >> out; return out; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
En employant soit std::stringstream ou les nouveaux utilitaires C 11 (tels que std::stol), les développeurs peuvent convertir efficacement les chaînes hexadécimales en entiers signés en C .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!