Maison >développement back-end >C++ >Comment convertir efficacement des chaînes en hexadécimal et vice versa en C ?
Conversion de chaînes en hexadécimal et vice versa en C
La conversion de chaînes en hexadécimal et vice versa est une tâche courante dans de nombreux scénarios de programmation. En C , il existe plusieurs approches pour réaliser cette conversion efficacement.
Conversion de chaîne en hexadécimal
Pour convertir une chaîne en sa représentation hexadécimale, nous pouvons utiliser une boucle et opérations au niveau du bit. Pour chaque caractère de la chaîne, nous pouvons extraire sa valeur ASCII, la convertir en hexadécimal à l'aide de la technique de décalage de bits (décalage à droite et à gauche) et ajouter les chiffres hexadécimaux résultants à une chaîne de sortie.
Voici un exemple d'implémentation :
std::string string_to_hex(const std::string& input) { static const char hex_digits[] = "0123456789ABCDEF"; std::string output; output.reserve(input.length() * 2); for (unsigned char c : input) { output.push_back(hex_digits[c >> 4]); output.push_back(hex_digits[c & 15]); } return output; }
Hexadécimal vers chaîne Conversion
Pour décoder une chaîne hexadécimale dans sa représentation de caractères d'origine, nous utilisons une structure de boucle similaire. Nous analysons la chaîne d'entrée deux caractères à la fois, convertissons chaque paire de chiffres hexadécimaux en leur valeur ASCII correspondante à l'aide d'une table de recherche ou d'opérations au niveau du bit, et accumulons les caractères décodés dans une chaîne de sortie.
Voici une fonction pour effectuer cette conversion :
std::string hex_to_string(const std::string& input) { const auto len = input.length(); if (len & 1) throw std::invalid_argument("odd length"); std::string output; output.reserve(len / 2); for (auto it = input.begin(); it != input.end(); ) { int hi = hex_value(*it++); int lo = hex_value(*it++); output.push_back(hi << 4 | lo); } return output; } int hex_value(unsigned char hex_digit) { static const signed char hex_values[256] = {...}; int value = hex_values[hex_digit]; if (value == -1) throw std::invalid_argument("invalid hex digit"); return value; }
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!