Convertir une chaîne hexadécimale en entier signé en C
De nombreuses situations nécessitent la conversion d'une chaîne hexadécimale en un entier signé en C . Par exemple, vous pouvez avoir une chaîne hexadécimale comme "fffefffe" représentant une valeur binaire de 1111111111111110111111111111110, qui correspond à l'entier signé -65538.
Solution utilisant std::stringstream
Une approche pour y parvenir cette conversion implique l'utilisation de std::stringstream:
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
Numéros non négatifs
Pour gérer les nombres non négatifs, vous pouvez utiliser l'exemple suivant :
#include <sstream> #include <iostream> int main() { unsigned int x; std::stringstream ss; ss << std::hex << "0000000A"; ss >> x; std::cout << static_cast<int>(x) << std::endl; }
Cela produira 10 comme résultat, ce qui est correct pour la chaîne hexadécimale "0000000A".
C 11 Fonctions chaîne à nombre
En C 11, vous pouvez utiliser des fonctions chaîne à nombre telles que std::stoul :
std::string s = "0xfffefffe"; unsigned int x = std::stoul(s, nullptr, 16);
Autre Approches
Vous pouvez également exploiter des bibliothèques comme Boost, qui offre des fonctions telles que lexical_cast :
unsigned int x = boost::lexical_cast<int>("0x0badc0de");
Rolling Your Own lexical_cast
Si vous préférez une approche plus simple sans dépendances, vous pouvez utiliser une implémentation personnalisée de lexical_cast :
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");
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!