Maison >développement back-end >C++ >Comment puis-je convertir une chaîne hexadécimale en un entier signé en C ?

Comment puis-je convertir une chaîne hexadécimale en un entier signé en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 13:03:12560parcourir

How Can I Convert a Hex String to a Signed Integer in C  ?

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 &amp;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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn