Maison > développement back-end > C++ > Comment convertir efficacement des chaînes en hexadécimal et vice versa en C ?

Comment convertir efficacement des chaînes en hexadécimal et vice versa en C ?

Mary-Kate Olsen
Libérer: 2024-12-18 18:23:11
original
635 Les gens l'ont consulté

How to Efficiently Convert Strings to Hexadecimal and Vice Versa in 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;
}
Copier après la connexion

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;
}
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