酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现二进制转十六进制的高效方法

### 💡思路分析 由于输入的二进制数可能很长,长度可达 400000 位,所以不能简单地将其转换为十进制数再转换为十六进制数。我们可以利用二进制和十六进制的对应关系,每 4 位二进制数可以唯一对应 1 位十六进制数,因此可以将输入的二进制字符串按每 4 位一组进行划分,然后将每组二进制数转换为对应的十六进制字符。 ### 📝代码实现 ```cpp #include <iostream> #include <string> #include <unordered_map> using namespace std; // 定义一个映射表,将 4 位二进制数映射到对应的十六进制字符 unordered_map<string, char> binaryToHex = { {"0000", '0'}, {"0001", '1'}, {"0010", '2'}, {"0011", '3'}, {"0100", '4'}, {"0101", '5'}, {"0110", '6'}, {"0111", '7'}, {"1000", '8'}, {"1001", '9'}, {"1010", 'A'}, {"1011", 'B'}, {"1100", 'C'}, {"1101", 'D'}, {"1110", 'E'}, {"1111", 'F'} }; string binaryToHexadecimal(const string& binary) { string hexadecimal = ""; // 按每 4 位一组进行划分 for (size_t i = 0; i < binary.length(); i += 4) { string group = binary.substr(i, 4); // 将每组二进制数转换为对应的十六进制字符 hexadecimal += binaryToHex[group]; } return hexadecimal; } int main() { string binary; cin >> binary; string hexadecimal = binaryToHexadecimal(binary); cout << hexadecimal << endl; return 0; } ``` ### 🧐代码解释 1. **映射表 `binaryToHex`**:用于存储 4 位二进制数和对应的十六进制字符的映射关系。 2. **函数 `binaryToHexadecimal`**: - 遍历输入的二进制字符串,按每 4 位一组进行划分。 - 对于每组二进制数,通过映射表找到对应的十六进制字符,并添加到结果字符串中。 3. **主函数 `main`**: - 读取输入的二进制字符串。 - 调用 `binaryToHexadecimal` 函数将二进制字符串转换为十六进制字符串。 - 输出转换后的十六进制字符串。 ### ⚙️复杂度分析 - **时间复杂度**:$O(n)$,其中 $n$ 是输入二进制字符串的长度。因为只需要遍历一次输入字符串。 - **空间复杂度**:$O(1)$,因为映射表的大小是固定的,不随输入字符串的长度变化。 ### 💻开发建议 - **错误处理**:在实际应用中,可以添加对输入的检查,确保输入的字符串只包含 '0' 和 '1',且长度是 4 的整数倍。 - **性能优化**:如果输入的二进制字符串非常长,可以考虑使用更高效的数据结构或算法来减少内存使用和提高处理速度。 - **代码复用**:将二进制转十六进制的逻辑封装成一个独立的函数,方便在其他地方复用。 ######[AI写代码神器 | 820点数解答 | 2026-08-24 20:03:52]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]