二进制转十六进制:二进制转换成十六进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位,每四位表示一个16位。
十六进制与二进制对应关系
十六进制: | 0 | 1 | 2 | 3 | 4 |
二进制: | 0000 | 0001 | 0010 | 0101 | 0100 |
十六进制: | 5 | 6 | 7 | 8 | 9 |
二进制: | 0101 | 0110 | 0111 | 1000 | 1001 |
十六进制: | A | B | C | D | E |
二进制: | 1010 | 1011 | 1100 | 1101 | 1110 |
十六进制: | F | ||||
二进制: | 1111 |
题目描述:
输入一个0和1字符组成的二进制字符串,请转换成十六进制。
输入:11010100101
输出:6A5
#include<iostream>
using namespace std;
int main()
{
string str;
string str1;
int j = 0;
cin >> str;
if(str.size()%4==1)
{
str.insert(0, "000");
}
if (str.size() % 4 == 2)
{
str.insert(0, "00");
}
if (str.size() % 4 == 3)
{
str.insert(0, "0");
}
for (int i=0;i<str.size();i=i+4)
{
str1 = str.substr(i, 4);
j = 0;
if(str1[0]=='1')
{
j = j + 8;
}
if (str1[1] == '1')
{
j = j + 4;
}
if (str1[2] == '1')
{
j = j + 2;
}
if (str1[3] == '1')
{
j = j + 1;
}
else
{
j = j + 0;
}
switch (j)
{
case 0:cout << "0"; break;
case 1:cout << "1"; break;
case 2:cout << "2"; break;
case 3:cout << "3"; break;
case 4:cout << "4"; break;
case 5:cout << "5"; break;
case 6:cout << "6"; break;
case 7:cout << "7"; break;
case 8:cout << "8"; break;
case 9:cout << "9"; break;
case 10:cout << "A"; break;
case 11:cout << "B"; break;
case 12:cout << "C"; break;
case 13:cout << "D"; break;
case 14:cout << "E"; break;
case 15:cout << "F"; break;
default:
break;
}
}
return 0;
}