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