ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

BCD码和HEX16进制码相互转换(C++)

2022-02-24 16:00:44  阅读:273  来源: 互联网

标签:case bin HEX16 BCD hex C++ break dec data


BCD码和HEX16进制码相互转换

Hex2BCD:
  1. 如果要表示为十六进制,则转换为10进制数,前面加0x符号;(十六进制表示)(hex_to_dec)
  2. 如果要表示为十进制,则先转换为10进制数,前面加0x符号,再把加上符号的十六进制数转为十进制数;(十进制表示)(两次十六进制和十进制的转换)
BCD2HEX
  1. 如果这个数是16进制表示的,把0x符号去掉,当成10进制数直接转换为16进制数(bcd_to_hex16)
  2. 如果这个数是十进制表示的,先把这个数转换为16进制数,再把0x符号去掉,当成十进制数,再转化为十六进制数(bcd_to_hex10)
十进制与十六进制的相互转换

hex_to_dec
dec_to_hex

代码
#include<iostream>
#include<string>
#include<math.h>
#include<sstream>
using namespace std;
int hex_to_dec(string hex_data){
	string bin_data="";
	for(int i=0;i<hex_data.length();i++){
		switch(hex_data[i]){
		   case '0': bin_data += "0000"; break;  
           case '1': bin_data += "0001"; break;  
           case '2': bin_data += "0010"; break;  
           case '3': bin_data += "0011"; break;  
           case '4': bin_data += "0100"; break;  
           case '5': bin_data += "0101"; break;  
           case '6': bin_data += "0110"; break;  
           case '7': bin_data += "0111"; break;  
           case '8': bin_data += "1000"; break;  
           case '9': bin_data += "1001"; break;  
           case 'A': 
           case 'a': bin_data += "1010"; break;  
           case 'B':
           case 'b': bin_data += "1011"; break;  		 
           case 'C': 
		   case 'c': bin_data += "1100"; break; 
		   case 'd':
           case 'D': bin_data += "1101"; break;  
           case 'e':
           case 'E': bin_data += "1110"; break;  
           case 'f':
           case 'F': bin_data += "1111"; break;  
           default:break; 
		}
		
	} 
	int dec_data=0;
	int con=0;
	for(int j=bin_data.size()-1;j>0;j--){
		
		if(bin_data[j]=='1'){
			dec_data+=pow(2,con);
		}
		con++;
	}
	return dec_data;
}
string dec_to_hex(int dec_data){
	string hex_data="";
	while(dec_data!=0){
		switch(dec_data%16){
		   case 0: hex_data += "0"; break;  
           case 1: hex_data += "1"; break;  
           case 2: hex_data += "2"; break;  
           case 3: hex_data += "3"; break;  
           case 4: hex_data += "4"; break;  
           case 5: hex_data += "5"; break;  
           case 6: hex_data += "6"; break;  
           case 7: hex_data += "7"; break;  
           case 8: hex_data += "8"; break;  
           case 9: hex_data += "9"; break;  
           case 10: hex_data +="A"; break;
           case 11: hex_data +="B"; break;  
           case 12: hex_data +="C"; break;
           case 13: hex_data +="D"; break;  		 
           case 14: hex_data +="E"; break;
		   case 15: hex_data +="F"; break; 
           default:break; 
		}
		dec_data/=16;
	}
	string real_hex_data="0x";
	for(int i=0;i<hex_data.length();i++){
		real_hex_data+=hex_data[hex_data.length()-1-i];
	}
	return real_hex_data;
}

string bcd_to_hex16(string bcd_data){
	int dec_data;
	string real_bcd_data="";
	for(int i=2;i<bcd_data.length();i++){
		real_bcd_data+=bcd_data[i];
	}
	istringstream is(real_bcd_data); 
	is>>dec_data;
	string hex_data=dec_to_hex(dec_data);
	return hex_data;
}
string bcd_to_hex10(int bcd_data){
	string hex_data=dec_to_hex(bcd_data);
	string real_hex_data;
	for(int i=2;i<hex_data.length();i++){
		real_hex_data+=hex_data[i];
	}
	istringstream is(real_hex_data); 
	int dec_data;
	is>>dec_data;
	string hex_data2=dec_to_hex(dec_data);
	return hex_data2;
}
int main(){
	string hex_data="3F";
	int dec_data=hex_to_dec(hex_data);
	ostringstream os;
	os << dec_data; 
	string dec_data1=os.str();
	cout<<"16进制数:"<<hex_data<<endl;
	cout<<"10进制数:"<<dec_data<<endl;
	
	string bcd_data16="0x"+os.str();//用十六进制表达 
	
	int bcd_data10=hex_to_dec(dec_data1);//用十进制表达 
	cout<<"BCD数,用16进制表达"<<bcd_data16<<endl;
	cout<<"BCD数,用10进制表达"<<bcd_data10<<endl;
	cout<<"------------------------------"<<endl;
	cout<<dec_to_hex(19)<<endl;
	cout<<"BCD数,用16进制表达为0x63"<<endl;
	cout<<"BCD数,用10进制表达为99"<<endl; 
    cout<<bcd_to_hex16("0x63")<<endl;
    cout<<bcd_to_hex10(99)<<endl;
	return 0;	
}

标签:case,bin,HEX16,BCD,hex,C++,break,dec,data
来源: https://blog.csdn.net/DCYdcy666/article/details/123113219

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有