预备知识
-
十进制转十六进制规则
十六进制每一位上可以是从小到大为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 一共16个数,即逢 16 进1,其中用 A,B,C,D,E,F(字母使用大写)这六个字母来分别表示10,11,12,13,14,15。
十进制转化为十六进制计算方式,简单说就是整数除以 16 取余,直到商为 0 为止,然后从最后一个余数读到第一个。由于每次除后得到的余数可能会大于 9,而十六进制采用 A、B、C、D、E、F 表示10,11,12,13,14,15,所以要建立这之间的关系,可以采用查表法。 - C++ string 类添加字符的函数 pushback()。
思路、步骤
string toHexString(int n) 实现思路:
- 创建一个 string 对象,用于保存转换后的十六进制字符串;
- 创建一个字符数组,该字符数组中保存 16 进制表示所需用到的字符,1、2、3、...、9、A、B、C、D、E、F;
- 根据十进制转十六进制公式,循环计算商和模,直到商为 0,将模(即余数)保存到一个整数数组中;
- 反向遍历余数的数组,根据查表法,从第 2 步中对应的字符添加到 string 对象中,遍历结束,得到转换后的十六进制字符串。
代码实现
#include <iostream> #include <string> using namespace std; string toHexString(int n); int main() { int n; cin >> n; string hexStr = toHexString(n); cout << hexStr << endl; return 0; } string toHexString(int n) { string hexStr; int i = 0, m, num[100]; char hex[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; do { num[i++] = n % 16; n = n / 16; } while (n > 0); for (i = i - 1; i >= 0; i--) { m = num[i]; hexStr.push_back(hex[m]); } return hexStr; }