#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;
}
C++ 中進制間轉換
1、二進制轉換爲16進制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.