进制之间的转换

    技术2026-02-09  4

    这里强调一下数据变量的范围(32位系统): short int2字节 int4字节 long int : 4字节 long long : 8字节 char : 1字节 float4字节,保留小数位7double8字节 保留小数位16

    十进制转十六进制 十进制转其他进制好像方法都差不多,这里以16进制为例 方法:使用这个数一方面取余数,另一方面让这个数等于这个数除以16;

    #include <iostream> #include <string> using namespace std; string TenToSixteen(long long ten); int main() { long long ten; cin >> ten; string sixteen; sixteen = TenToSixteen(ten); cout << sixteen << endl; system("pause"); return 0; } string TenToSixteen(long long ten) { string sixteen; int yushu; if (ten == 0) { return "0"; } while (ten > 0) { yushu = ten%16;//取余数 ten = ten/16; switch (yushu) { case 0:sixteen.insert(0,"0");break; case 1:sixteen.insert(0,"1");break; case 2:sixteen.insert(0,"2");break; case 3:sixteen.insert(0,"3");break; case 4:sixteen.insert(0,"4");break; case 5:sixteen.insert(0,"5");break; case 6:sixteen.insert(0,"6");break; case 7:sixteen.insert(0,"7");break; case 8:sixteen.insert(0,"8");break; case 9:sixteen.insert(0,"9");break; case 10:sixteen.insert(0,"A");break; case 11:sixteen.insert(0,"B");break; case 12:sixteen.insert(0,"C");break; case 13:sixteen.insert(0,"D");break; case 14:sixteen.insert(0,"E");break; case 15:sixteen.insert(0,"F");break; } } return sixteen; }

    十六进制转八进制

    方法:先转成二进制,一个十六进制对应4位二进制; 一个八进制对应3位二进制

    #include <iostream> #include <string> using namespace std; string SixteenToEight(string str); int main() { int num; cin >> num; string *sixteen = new string[num]; string eight; for (int i=0;i < num;i ++) { cin >> sixteen[i]; } for (int i=0;i < num;i ++) { eight = SixteenToEight(sixteen[i]); cout << eight << endl; } system("pause"); return 0; } string SixteenToEight(string sixteen) { string Bin; string eight; string eight1; for (int i=0;i < sixteen.size();i ++) { switch (sixteen[i]) { case '0':Bin.append("0000");break; case '1':Bin.append("0001");break; case '2':Bin.append("0010");break; case '3':Bin.append("0011");break; case '4':Bin.append("0100");break; case '5':Bin.append("0101");break; case '6':Bin.append("0110");break; case '7':Bin.append("0111");break; case '8':Bin.append("1000");break; case '9':Bin.append("1001");break; case 'A':Bin.append("1010");break; case 'B':Bin.append("1011");break; case 'C':Bin.append("1100");break; case 'D':Bin.append("1101");break; case 'E':Bin.append("1110");break; case 'F':Bin.append("1111");break; } } int k; k = Bin.size()%3; if (1==k) { Bin.insert(0,"00"); } else if (2==k) { Bin.insert(0,"0"); } for (int i=0;i < Bin.size();i=i+3) { int d; d = 4*(Bin[i]-'0')+2*(Bin[i+1]-'0')+(Bin[i+2]-'0'); eight1+=(d+'0'); } if (eight1[0] = '0') { eight1.erase(0,1); } eight = eight1; return eight; }

    十六进制转十进制

    #include <iostream> #include <string> using namespace std; long long SixteenToTen(string str); int main() { string sixteen; cin >> sixteen; long long int ten = 0; ten = SixteenToTen(sixteen); cout << ten << endl; system("pause"); return 0; } long long SixteenToTen(string str) { long long answer = 0; int len; len = str.size(); for (int i=0;i < len;i ++) { if (str[i] <= '9'&& str[i] >= '0') { answer = answer + (str[i]-'0')*pow(16,len-i-1); } else { answer = answer + (str[i]-'0'-7)*pow(16,len-i-1); } } return answer; }
    Processed: 0.018, SQL: 10