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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章