您的位置:首页 > 其它

SS_ 十六进制转八进制

2016-01-08 17:46 435 查看


目的1:16进制->2进制->8进制

目的2:进制转化注意添0和灭0(2处)

#include "iostream"
#include "string"
using namespace std;

int main(){
int n;
cin>>n;
while(n--){
string s_16;
string s_8;
string s_2;
int length;
cin>>s_16;
length=s_16.length();
//转化成二进制
for(int i=0;i<length;i++){
switch(s_16[i]){
case '0':s_2+="0000";break;
case '1':s_2+="0001";break;
case '2':s_2+="0010";break;
case '3':s_2+="0011";break;
case '4':s_2+="0100";break;
case '5':s_2+="0101";break;
case '6':s_2+="0110";break;
case '7':s_2+="0111";break;
case '8':s_2+="1000";break;
case '9':s_2+="1001";break;
case 'A':s_2+="1010";break;
case 'B':s_2+="1011";break;
case 'C':s_2+="1100";break;
case 'D':s_2+="1101";break;
case 'E':s_2+="1110";break;
case 'F':s_2+="1111";break;
}
}
length=s_2.length();
//3个二进制转化成一个八进制,如果s_2.length()不是3的倍数就报错
if(length%3==1){
s_2="00"+s_2;
}
if(length%3==2){
s_2="0"+s_2;
}
//转化成八进制
for(int i=0;i<length;i=i+3){
int add=(s_2[i]-'0')*4+(s_2[i+1]-'0')*2+(s_2[i+2]-'0');
switch(add){
case 0:s_8+="0";break;
case 1:s_8+="1";break;
case 2:s_8+="2";break;
case 3:s_8+="3";break;
case 4:s_8+="4";break;
case 5:s_8+="5";break;
case 6:s_8+="6";break;
case 7:s_8+="7";break;
}
}
length=s_8.length();
for(int i=0;i<length;i++){
//将首位置0灭掉,就像数字电子逻辑的灭0操作
if(i==0&&s_8[0]=='0'){
continue;
}
cout<<s_8[i];
}
cout<<endl;

}
return 0;

}


这里2处switch语句省去了很多麻烦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: