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

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