二进制、十进制、十六进制互相转换

今天看书讲到十进制、二进制、十六进制的互相转换,自己试了下。十进制和十六进制互相转换需要借助二进制作为中间媒介。用到了STL标准库的向量、队列、字符串。

// decimal2hex2decimal.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <deque>

using namespace std;

//十进制转为二进制
vector<int> dec2bin(int num)
{
	vector<int> myvec;
	vector<int> binVec;
	//vector<int>::iterator Biter;
	vector<int>::iterator iter;
	
	while(num/2 != 0)
	{
		if(num%2 == 0)
		{
			myvec.push_back(0);
		}
		else
		{
			myvec.push_back(1);
		}
		num=num/2;
	}
	myvec.push_back(1);
	//反转一下向量实现真正转为二进制
	for(iter=myvec.end(); iter!=myvec.begin(); iter--)
	{
		binVec.push_back(*(iter-1));
		//cout<<(*iter);
	}
	return binVec;
}
//十进制转为十六进制
string dec2hex(int num)
{
	//十进制先转化为二进制
	string str;
	vector<int> myvec;
	deque<int> mydeq;//队列可以前后插
	vector<int> vec4;
	vector<int>::iterator iter;
	deque<int>::iterator Diter;
	vector<int>::iterator viter;
	myvec = dec2bin(num);
	//然后每4位转为一个十六进制
	for(iter=myvec.begin(); iter!=myvec.end(); iter++)
	{
		mydeq.push_back(*iter);
	}
	int len=myvec.size();
	int mod=len%4;
	if(mod != 0)
	{
		for(int i=0; i<(4-mod); i++)
		{
			mydeq.push_front(0);
		}
	}
	cout<<endl<<"补全"<<endl;
	for(Diter=mydeq.begin(); Diter!=mydeq.end(); Diter++)
	{
		cout<<(*Diter);
	}
	cout<<endl;

	int sum=0;
	int j=0;
	int a;
	string s;
	for(Diter=mydeq.begin(); Diter!=mydeq.end(); Diter++)
	{
		++j;
		vec4.push_back(*Diter);
		if(j==4)
		{
			for(viter=vec4.end(), a=0; viter!=vec4.begin(); viter--, a++)
			{
				sum=sum + (*(viter-1))*pow(2.0,a);
			}
			if(sum<10)
				s='0'+sum;
			else
				s='A'+sum-10;
			str=str+s;
			s.clear();
			j=0;
			sum=0;
			vec4.clear();
		}

	}

	return str;
}

//二进制转为十进制
int bin2dec(vector<int> vec)
{
	//int num;
	vector<int>::iterator iter;
	int sum=0, a;
	for(iter=vec.end(), a=0; iter!=vec.begin(); iter--, a++)
	{
		sum = sum + (*(iter-1))*pow(2.0, a);
	}
	return sum;
}

//十六进制转为十进制
int hex2dec(string str)
{
	vector<int> myvec;
	for(int i=0; i<str.size(); i++)
	{
		switch(str.at(i))
		{
		case '0':
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(0);
			break;
		case '1':
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(1);
			break;
		case '2':
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(0);
			break;
		case '3':
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(1);
			break;
		case '4':
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(0);
			break;
		case '5':
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(1);
			break;
		case '6':
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(0);
			break;
		case '7':
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(1);
			break;
		case '8':
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(0);
			break;
		case '9':
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(0);
			myvec.push_back(1);
			break;
		case 'A':
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(0);
			break;
		case 'B':
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(1);
			myvec.push_back(1);
			break;
		case 'C':
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(0);
			break;
		case 'D':
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(0);
			myvec.push_back(1);
			break;
		case 'E':
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(0);
			break;
		case 'F':
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(1);
			myvec.push_back(1);
			break;
		}
	}
	int num = bin2dec(myvec);
	return num;
}

int _tmain(int argc, _TCHAR* argv[])
{
	//首先是十进制转二进制
	vector<int> myvec;
	vector<int>::iterator iter;
	cout<<"请输入一个十进制数:"<<" ";
	int num;
	cin>>num;
	myvec = dec2bin(num);
	cout<<"转换成二进制数为:"<<" ";
	/*cout<<myvec.size()<<endl;*/
	for(iter=myvec.begin(); iter!=myvec.end(); iter++)
	{
		cout<<(*iter);
	}
	cout<<endl;
	cout<<"转换成十六进制数为:";
	string str = dec2hex(num);
	cout<<str<<endl;
	//二进制转十进制
	cout<<"二进制转十进制为:";
	int number = bin2dec(myvec);
	cout<<number<<endl;
	//十六进制转十进制 
	cout<<"十六进制转十进制为:";
	int numb = hex2dec(str);
	cout<<numb<<endl;
	system("pause");
	return 0;
}

结果:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值