首页 > 其他 > 详细

16进制转换

时间:2021-01-31 14:21:05      阅读:18      评论:0      收藏:0      [点我收藏+]

将16进制转换为8进制和十进制

  • 利用二进制作为桥梁
#include<iostream>
#include<string>
using namespace std;


string resoxTOb(char ch) {
    //单纯的字符转换(16->2)
	if (ch == ‘0‘)
		return "0000";
	else if (ch == ‘1‘)
		return "0001";
	else if (ch == ‘2‘)
		return "0010";
	else if (ch == ‘3‘)
		return "0011";
	else if (ch == ‘4‘)
		return "0100";
	else if (ch == ‘5‘)
		return "0101";
	else if (ch == ‘6‘)
		return "0110";
	else if (ch == ‘7‘)
		return "0111";
	else if (ch == ‘8‘)
		return "1000";
	else if (ch == ‘9‘)
		return "1001";
	else if (ch == ‘A‘)
		return "1010";
	else if (ch == ‘B‘)
		return "1011";
	else if (ch == ‘C‘)
		return "1100";
	else if (ch == ‘D‘)
		return "1101";
	else if (ch == ‘E‘)
		return "1110";
	else 
		return "1111";
}


string resbTOo(string str) {
    //单纯的字符转换(2->8)
	if (str == "000")
		return "0";
	else if (str == "001")
		return "1";
	else if (str == "010")
		return "2";
	else if (str == "011")
		return "3";
	else if (str == "100")
		return "4";
	else if (str == "101")
		return "5";
	else if (str == "110")
		return "6";
	else if(str=="111")
		return "7";
}


void oxTOb(string ox[],string b[],int n) {
    //16进制转换为2进制
	for (int i = 0; i < n; i++) {
		for(int j=0;j<ox[i].length();j++){
			b[i] += resoxTOb(ox[i][j]);
		}
	}
}

void bTOo(string o[], string b[], int n) {
    //2进制转换为8进制
	for (int i = 0; i < n; i++) {
		if (b[i].length() % 3 == 1) {
			b[i].insert(0, "00");
		}
		else if(b[i].length() % 3 == 2){
			b[i].insert(0, "0");
		}
		for (int j = 0; j<b[i].length(); j+=3) {
			o[i] += resbTOo(b[i].substr(j,3));
		}
	}
}

void bTOd(string b[], long long d[], int n) {
    //2进制转换为10进制,直接利用2的幂运算简单粗暴
	for (int i = 0; i < n; i++) {
		d[i] = 0;
		for (int j = b[i].length()-1; j >=0; j--) {
			if (b[i][j] == ‘1‘) d[i] += pow(2, b[i].length() - 1-j);
		}
	}
}

void format(string o[],int n) {
    //格式输出,不然输入0,会输出00这样的结果。
	for (int i = 0; i < n; i++) {
		while (true) {
			if (o[i] == "0" || o[i][0] != ‘0‘)
				break;
			else o[i].erase(0, 1);
		}
	}
}

int main() {
	string ox[10];
	string o[10];
	string b[10];
	long long d[10];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> ox[i];
	}
	oxTOb(ox, b, n);
	string newb[10];
	for (int i = 0; i < n; i++) {
		newb[i] = b[i];
	}
	bTOo(o, b, n);
	format(o, n);
	bTOd(b, d, n);
	for (int i = 0; i < n; i++) {
		cout << "0x"<<ox[i]<<"的二进制为:"<<newb[i]<<"B,八进制为:"<<o[i]<<"O,十进制为:"<<d[i] <<"D"<< endl;
	}

}

16进制转换

原文:https://www.cnblogs.com/MrDaddy/p/14352305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!