第一次发博客,若写的不好,希望大家多提下意见
一个简单的进制转换的问题
十六进制转换成八进制
思想:先把十六进制的数转成二进制,然后再把二进制的数转成八进制
#include <iostream>
#include <string>
using namespace std;
string hexToBin(string hex)//十六进制转二进制
{
string bin = "";
for (int i = 0; i < hex.length(); i++)
{
switch(hex[i])
{
case '0':bin += "0000";break;
case '1':bin += "0001";break;
case '2':bin += "0010";break;
case '3':bin += "0011";break;
case '4':bin += "0100";break;
case '5':bin += "0101";break;
case '6':bin += "0110";break;
case '7':bin += "0111";break;
case '8':bin += "1000";break;
case '9':bin += "1001";break;
case 'A':bin += "1010";break;
case 'B':bin += "1011";break;
case 'C':bin += "1100";break;
case 'D':bin += "1101";break;
case 'E':bin += "1110";break;
case 'F':bin += "1111";break;
}
}
return bin;
}
string binToOctal(string bin)//二进制转八进制
{
string octal = "";
if (bin.length() % 3 != 0)//保证有二进制位数为3的倍数
{
int len = bin.length() % 3;
if (bin[0]=='0' && bin[1]=='0' && bin[2]=='0')
{
bin = bin.substr(len);
}
else
{
bin.insert(0, 3-len, '0');
}
}
for (int i = 0; i < bin.length(); i+=3)//
{
string temp = bin.substr(i, 3);
if (!temp.compare("000"))
{
octal+='0';
}
else if (!temp.compare("001"))
{
octal+='1';
}
else if (!temp.compare("010"))
{
octal+='2';
}
else if (!temp.compare("011"))
{
octal+='3';
}
else if (!temp.compare("100"))
{
octal+='4';
}
else if (!temp.compare("101"))
{
octal+='5';
}
else if (!temp.compare("110"))
{
octal+='6';
}
else if (!temp.compare("111"))
{
octal+='7';
}
}
if (octal[0] == '0')//删除前导为0的位
octal = octal.substr(1);
return octal;
}
int main()
{
int n;
string hexStr;
cin >> n;
while (n)
{
n--;
cin >> hexStr;
cout << binToOctal(hexToBin(hexStr)) << endl;
}
return 0;
}
871

被折叠的 条评论
为什么被折叠?



