在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中文網其他相關文章!