Maison > développement back-end > C++ > Comment convertir des chaînes hexadécimales en entiers signés en C ?

Comment convertir des chaînes hexadécimales en entiers signés en C ?

Barbara Streisand
Libérer: 2024-12-21 06:36:14
original
425 Les gens l'ont consulté

How to Convert Hex Strings to Signed Integers in C  ?

Conversion de chaînes hexadécimales en entiers signés en C

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).

Solution : Utiliser std::stringstream

Exploiter le std : :classestringstream, la conversion le processus devient simple :

unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
Copier après la connexion

En extrayant l'entier du flux, nous obtenons la représentation entière signée 32 bits de la chaîne hexadécimale.

Approches alternatives

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 &amp;) {
    // Handle conversion error
}
Copier après la connexion

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 &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

Conclusion

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!

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