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
505 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!

source:php.cn
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