C++ 中进制间转换

1、二进制转换为16进制
#include <iostream>
#include <string>   //C++ 中字符串string
#include <cstring>   // c串
#include<sstream>
#include <iomanip>
using namespace std;

/*
 * 转换过程中需要用到
 */
string test1(char* szBin)        // 存储szbinary所表达的二进制数据。
{
	char *p;
	unsigned char n = 0;
	unsigned char rightValue = 1;
		p = szBin + strlen(szBin);
	while ( p > szBin)
	{
	   p--;
	   if ( *p == '1' )
		   n += rightValue;
	   rightValue *= 2;
	}
//	printf( "%02X", n );    //以十六进制形式输出该二进制数据。
	stringstream ss;
	ss<<hex<<setw(2) << setfill('0')<<static_cast<int>(n);   //代替printf( "%02X", n ),以两位输出
	string str = ss.str();
//	cout<<str<<endl;
	return str;
}


/*
 * 二进制转换为16进制,并且除掉了前面的0
 */
string binaryToHex(char* szBinary){
	int m,i,l;
		char tmp[9];
		for(i=0;szBinary[i]!='\0';i++)// 检查szbinary的合法性:只能有0和1字符。
		{
		   if(szBinary[i]=='0')
			   continue;
		   else if(szBinary[i]=='1')
			   continue;
		   else
			   cout<<"input numbers wrong!\n"<<endl;
		}
//		printf("bits:%d\n",i);
		m=8-(i%8);
		string result ="";
		if(m!=0||m==8)
		{
			if(m==8)
				m=0;
			memcpy( szBinary+m, szBinary, strlen(szBinary)+1 );
			for(i=0;i<m;i++)
				szBinary[i]='0';
			i=0;

			while(szBinary[i]!='\0')
			{
				 for(l=0;l<8;i++,l++)
					 tmp[l]=szBinary[i];
				 tmp[l]=0;
				 result.append(test1(tmp));//调用输出函数。
			}
		}
		else
		{
			i=0;
			while(szBinary[i]!='\0')
			{
			   for(l=0;l<8;i++,l++)
				   tmp[l]=szBinary[i];
			   tmp[l] = 0;//szBinary[l]=szBinary[i];
			   result.append(test1(tmp));//调用输出函数。
			}
		}
		string re ="";
		for(i=0;i<result.length();i++){
			if(result[i]!='0')
				break;
		}
		return result.substr(i);
}

int main(){
	char szBinary[20] = "1000000101111";
	string HexStr = binaryToHex(szBinary);
	cout<<HexStr<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值