C++ 10进制和16进制的互转
2022-06-09
成功封装为函数,方便调用,其次本程序,只能实现16进制在8位以内的转换,也就是说16进制值必须 <= FFFFFFFF ,当然了对应的10进制值必须 <= 4294967295.其实已经很大很够用拉
下面是代码:代码太多,建议换个头文件
#include <string> #include <iostream> #include <stdio.h> using namespace std; //10到16 用法在下面 /* //10进制转到16进制 unsigned int typeten = 4294967295; string result = tentosixteen(typeten); cout << "10进制转到16进制结果:" << result << endl; */ int quzheng(unsigned int tendoc) { int qian = tendoc / 16; return qian; } string huanzhi(int numtype) { string us = std::to_string(numtype); if (us == "0") { string result = "0"; return result; } else if (us == "1") { string result = "1"; return result; } else if (us == "2") { string result = "2"; return result; } else if (us == "3") { string result = "3"; return result; } else if (us == "4") { string result = "4"; return result; } else if (us == "5") { string result = "5"; return result; } else if (us == "6") { string result = "6"; return result; } else if (us == "7") { string result = "7"; return result; } else if (us == "8") { string result = "8"; return result; } else if (us == "9") { string result = "9"; return result; } else if (us == "10") { string result = "A"; return result; } else if (us == "11") { string result = "B"; return result; } else if (us == "12") { string result = "C"; return result; } else if (us == "13") { string result = "D"; return result; } else if (us == "14") { string result = "E"; return result; } else if (us == "15") { string result = "F"; return result; } else if (us == "16") { string result = "10"; return result; } } string daoxu(string sixteendoc) { int length = strlen(sixteendoc.c_str()); int i = 0; string ret; string result; while (i < length || i == length) { ret = sixteendoc.substr(length - i, 1); result = result + ret; //cout << ret << endl; i = i + 1; } return result; } string tentosixteen(unsigned int tendoc) { //int tendoc = 426; int zhengshu = quzheng(tendoc); string sixteendoc = ""; while (true) { if (zhengshu > 16) { int cha = tendoc - zhengshu * 16; tendoc = zhengshu; //cout << cha << endl; string result = huanzhi(cha); sixteendoc = sixteendoc + result; zhengshu = quzheng(tendoc); } else if (zhengshu == 16) { int cha = tendoc - zhengshu * 16; tendoc = zhengshu; //cout << cha << endl; string result = huanzhi(cha); sixteendoc = sixteendoc + result; zhengshu = quzheng(tendoc); } else { int cha = tendoc - zhengshu * 16; tendoc = zhengshu; //cout << cha << endl; //cout << zhengshu << endl;//最后一个整数也是差值 string result1 = huanzhi(cha); string result2 = huanzhi(zhengshu); sixteendoc = sixteendoc + result1 + result2; break; } } string oversixdoc = daoxu(sixteendoc);//这个时候sixteendoc是反着的所以倒序倒为正了 //cout << "oversixdoc:" << oversixdoc << endl; int length = strlen(oversixdoc.c_str()); string tianchong; //cout <<"length:" << length << endl; int i = 8 - length; while (true) { if (i > 0) { tianchong = tianchong + "0"; } else { break; } i = i - 1; } //cout << "tianchong" << tianchong << endl; string result = tianchong + oversixdoc; //string result = tianchong + oversixdoc; return result; } //16到10 用法在下面 /* //16进制到10进制用法在下面 string typesixteen = "FFFFFFFF"; unsigned int result1 = sixteentoten(typesixteen); cout << "16进制转到10进制结果:" << result1 << endl; */ int beishu(int length) { int ji = 1; int length1 = 7 - length; int i = 0; while (true) { if (i < length1) { ji = ji * 16; } else { break; } i = i + 1; } //cout << "ji : " << ji << endl; return ji; } int callback(string ret, int i) { unsigned int callback = 1; //cout << "i:" << i << "ret" << ret << endl; //cout << "beishu : " << beilv << endl; if (ret == "0") { int beilv = beishu(i); callback = beilv * 0; } else if (ret == "1") { int beilv = beishu(i); callback = beilv * 1; } else if (ret == "2") { int beilv = beishu(i); callback = beilv * 2; } else if (ret == "3") { int beilv = beishu(i); callback = beilv * 3; } else if (ret == "4") { int beilv = beishu(i); callback = beilv * 4; } else if (ret == "5") { int beilv = beishu(i); callback = beilv * 5; } else if (ret == "6") { int beilv = beishu(i); callback = beilv * 6; } else if (ret == "7") { int beilv = beishu(i); callback = beilv * 7; } else if (ret == "8") { int beilv = beishu(i); callback = beilv * 8; } else if (ret == "9") { int beilv = beishu(i); callback = beilv * 9; } else if (ret == "A" || ret == "a") { int beilv = beishu(i); callback = beilv * 10; } else if (ret == "B" || ret == "b") { int beilv = beishu(i); callback = beilv * 11; } else if (ret == "C" || ret == "c") { int beilv = beishu(i); callback = beilv * 12; } else if (ret == "D" || ret == "d") { int beilv = beishu(i); callback = beilv * 13; } else if (ret == "E" || ret == "e") { int beilv = beishu(i); callback = beilv * 14; } else if (ret == "F" || ret == "f") { int beilv = beishu(i); callback = beilv * 15; } return callback; } int sixteentoten(string ten) { int length = strlen(ten.c_str()); int i = 0; int answer = 0; int reback; string ret; while (true) { if (i < length) { ret = ten.substr(i, 1);//获取到了每一个位数上的具体值 reback = callback(ret,i); answer = answer + reback; } else { break; } i = i + 1; } string result = "1"; return answer; } int main() { //10进制转到16进制 unsigned int typeten = 4294967295; string result = tentosixteen(typeten); cout << "10进制转到16进制结果:" << result << endl; //16进制到10进制用法在下面 string typesixteen = "FFFFFFFF"; unsigned int result1 = sixteentoten(typesixteen); cout << "16进制转到10进制结果:" << result1 << endl; while (true); }
发表评论: