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]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)448
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)405
- 256级灰阶图像压缩为16级灰阶的Python实现(字节豆包 | 675点数解答 | 2026-02-14 20:17:48)94
- 256级灰阶图像压缩为16级灰阶的C++实现方案(字节豆包 | 1080点数解答 | 2026-02-14 20:19:02)85
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)646
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)566
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)248
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)390
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)398
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)405
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)498
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)331