Heim >Backend-Entwicklung >C++ >Wie konvertiert man Strings in C effizient in Hexadezimalzahlen und umgekehrt?

Wie konvertiert man Strings in C effizient in Hexadezimalzahlen und umgekehrt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 18:23:11667Durchsuche

How to Efficiently Convert Strings to Hexadecimal and Vice Versa in C  ?

Konvertieren von Strings in Hexadezimalzahlen und umgekehrt in C

Das Konvertieren von Strings in Hexadezimalzahlen und umgekehrt ist in vielen Programmierszenarien eine häufige Aufgabe. In C gibt es mehrere Ansätze, um diese Konvertierung effizient durchzuführen.

String-zu-Hexadezimal-Konvertierung

Um einen String in seine hexadezimale Darstellung umzuwandeln, können wir eine Schleife und verwenden bitweise Operationen. Für jedes Zeichen in der Zeichenfolge können wir seinen ASCII-Wert extrahieren, ihn mithilfe der Bitverschiebungstechnik (Rechts- und Linksverschiebung) in Hexadezimal umwandeln und die resultierenden Hexadezimalziffern an eine Ausgabezeichenfolge anhängen.

Hier ist eine Beispielimplementierung:

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

Hexadezimal zu String Konvertierung

Um eine hexadezimale Zeichenfolge wieder in ihre ursprüngliche Zeichendarstellung zu dekodieren, verwenden wir eine ähnliche Schleifenstruktur. Wir analysieren die Eingabezeichenfolge jeweils für zwei Zeichen, konvertieren jedes Hexadezimalziffernpaar mithilfe einer Nachschlagetabelle oder bitweiser Operationen in den entsprechenden ASCII-Wert und sammeln die dekodierten Zeichen in einer Ausgabezeichenfolge.

Hier ist eine Funktion dazu Führen Sie diese Konvertierung durch:

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

Das obige ist der detaillierte Inhalt vonWie konvertiert man Strings in C effizient in Hexadezimalzahlen und umgekehrt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn