首頁 >後端開發 >C++ >如何在 C 中有效地將字串轉換為十六進制,反之亦然?

如何在 C 中有效地將字串轉換為十六進制,反之亦然?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 18:23:11645瀏覽

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

在C 中將字串轉換為十六進制,反之亦然

將字串轉換為十六進制,反之亦然是許多程式場景中的常見任務。在 C 中,有多種方法可以有效地完成此轉換。

字串到十六進位轉換

要將字串轉換為其十六進位表示形式,我們可以使用循環和位元運算。對於字串中的每個字符,我們可以提取其 ASCII 值,使用位移技術(右移和左移)將其轉換為十六進制,並將生成的十六進制數字附加到輸出字串。

這是一個範例實作:

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

十六進位轉字串轉換

為了將十六進位字串解碼回其原始字元表示形式,我們採用類似的循環結構。我們一次解析輸入字串兩個字符,使用查找表或位元運算將每對十六進位數字轉換為其相應的 ASCII 值,並將解碼後的字符累積在輸出字串中。

這裡有一個函數執行此轉換:

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

以上是如何在 C 中有效地將字串轉換為十六進制,反之亦然?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn