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
Libérer: 2024-12-28 13:03:12
original
562 Les gens l'ont consulté

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;
Copier après la connexion

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;
}
Copier après la connexion

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);
Copier après la connexion

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");
Copier après la connexion

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"); 
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal