admin管理员组文章数量:1794759
C++ 进制转换器:二进制、十进制、十六进制
做了一个C++进制转换器,支持10转2、10转16、2转10、16转10、10转2、2转16,解析都写在代码里哦!
#include <bits/stdc++.h> using namespace std; char *d_b(int input_d);//10进制转2进制 char *d_h(int input_d);//10进制转16进制 int b_d(char input_c[], int input_c_len); //2进制转10进制 int h_d(char input_c[], int input_c_len); //16进制转10进制 char *h_b(char input_c[], int input_c_len); //16进制转2进制 char *b_h(char input_c[], int input_c_len); //2进制转16进制 int main() { //界面绘制 cout << "**** ————————二进制、十进制、十六进制 转换器———————— ****" << endl; cout << endl; cout << "1.十进制转二进制" << endl; cout << "2.十进制转十六进制" << endl; cout << "3.二进制转十进制" << endl; cout << "4.十六进制转十进制" << endl; cout << "5.十六进制转二进制" << endl; cout << "6.二进制转十六进制" << endl; cout << endl; cout << "输入对应的数字1~6,即可选择相应的进制转换功能" << endl; int num = 0; //判断程序功能 int user_input_d = 0; //存放用户输入(10进制数) char user_input_c[1000] = {' '}; //存放用户输入(2进制数,16进制数存这个里面) //根据选择的功能,进行提示语 cin >> num; switch (num) { case 1: cout << "您要使用的是:十进制转二进制。请输入一个十进制数:"; break; case 2: cout << "您要使用的是:十进制转十六进制。请输入一个十进制数:"; break; case 3: cout << "您要使用的是:二进制转十进制。请输入一个二进制数:"; break; case 4: cout << "您要使用的是:十六进制转十进制。请输入一个十六进制数(字母要大写):"; break; case 5: cout << "您要使用的是:十六进制转二进制。请输入一个十六进制数(字母要大写):"; break; case 6: cout << "您要使用的是:二进制转十六进制。请输入一个二进制数:"; break; default: cout << "输入无效!请输入1~6的数字!"; return num; } //根据用户输入的数字来决定用什么输入 if ((num == 1) || (num == 2)) cin >> user_input_d; else cin >> user_input_c; //根据选择的功能,进行操作 switch (num) { case 1: cout << d_b(user_input_d) << endl; break;//十进制转二进制 case 2: cout << d_h(user_input_d) << endl; break;//十进制转十六进制 case 3: cout << b_d(user_input_c, strlen(user_input_c) - 1);//实参为用户输入的字符数组与字符数组长度 break;//二进制转十进制 case 4: cout << h_d(user_input_c, strlen(user_input_c) - 1); break;//十六进制转十进制 case 5: cout << h_b(user_input_c, strlen(user_input_c) - 1) << endl; break;//十六进制转二进制 case 6: cout << b_h(user_input_c, strlen(user_input_c) - 1) << endl; break;//二进制转十六进制 default: cout << "输入无效!请输入1~6的数字!"; return num; } return 0; } //10进制转2进制自定义函数 char *d_b(int input_d) { cout << "10进制转2进制:"; static char result[999];//10进制转2进制的结果用一个字符数组来存 int xb = 0; //下标遍历器 for (int a = input_d; a != 0; a /= 2)//短除法对这个十进制数不断的除2,得到的余数存在字符数组中 { result[xb] = (a % 2) + 48; //对2取余只能得到两种结果1和0,用字符来表示'1',相当于是ASCII码值49; xb++; } strrev(result);//由于存的取的余数是倒着的,所以翻转一次。 return result;//函数返回这个结果 } //10进制转16进制自定义函数 char *d_h(int input_d) { cout << "10进制转16进制:"; static char result[999];//10进制转2进制的结果用一个字符数组来存 int xb = 0; //下标遍历器 for (int a = input_d; a != 0; a /= 16)//短除法对这个十进制数不断的除16,得到的余数存在字符数组中 { //对16取余能得到15种结果0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; if (a % 16 >= 10) result[xb] = a % 16 + 55; //如果得出的余数>=10则用余数+55,比如得出的余数是11,11+55=66,字符代表'B' else result[xb] = a % 16 + 48; //如果得出的余数<10则用余数+48,比如得出的余数是0,0+48=48,字符代表'0' xb++; } strrev(result);//由于存的取的余数是倒着的,所以翻转一次。 return result;//函数返回这个结果 } //2进制转10进制自定义函数 int b_d(char input_c[], int input_c_len)//input_c_len是用户输入字符数组的长度 { cout << "2进制转10进制:"; int result = 0;//定义一个整型变量来存2转16的结果 for (int a = input_c_len; a >= 0; a--)//倒序遍历 { //按权展开字符数组里的元素要转成整形减掉48,比如字符数组中存的是'1' '0' '0',1的ASCII是49 49-48=1 result = result + ((int)input_c[a] - 48) * pow(2, input_c_len - a); } return result;//函数返回这个结果 } //16进制转10进制自定义函数 int h_d(char input_c[], int input_c_len) { cout << "16进制转10进制:"; int result = 0; for (int a = input_c_len; a >= 0; a--) { if (input_c[a] >= 'A')//如果数组元素是A~F 就减去55得到对应的10~15 result = result + ((int)input_c[a] - 55) * pow(16, input_c_len - a); else//如果数组元素是A~F 就减去48得到对应的0~9 result = result + ((int)input_c[a] - 48) * pow(16, input_c_len - a); } return result;//函数返回这个结果 } //16进制转2进制自定义函数 char *h_b(char input_c[], int input_c_len) { cout << "16进制转2进制:"; int result_dec = h_d(input_c, input_c_len); //调用16转10自定义函数,然后得到一个整数结果 static char result[1000]; strcpy(result, d_b(result_dec)); //调用10转2自定义函数,将结果复制到result字符数组中 return result;//输出result字符数组 } //2进制转16进制自定义函数 char *b_h(char input_c[], int input_c_len) { cout << "2进制转16进制:"; int result_dec = b_d(input_c, input_c_len); //调用2转10自定义函数,然后得到一个整数结果 static char result[1000]; strcpy(result, d_h(result_dec)); //调用10转16自定义函数,将结果复制到result字符数组中 return result;//输出result字符数组 }版权声明:本文标题:C++ 进制转换器:二进制、十进制、十六进制 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686581656a84225.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论