思路:不管输入是哪种进制,先统一转换成一种特定的通用的进制(中转者),再转换成指定进制。
最合适的中转者—>十进制。
原因1:使用stoi函数可以将其他进制的数转换成10进制
//stoi函数的基本使用方法
stoi(str,nullptr,2); //str是要转换的表达式,nullptr是默认的起始位置,第三个参数是原进制,最后会返回十进制的整数
原因2:10进制可以用取余的方法转换成任意进制
- 10进制——>8进制
对10进制整数一直%8,直至商为0,逆序排列余数即可得到8进制的数
string ToOCt(int dec)
{
string oct = "";
while (mid > 0)
{
int remainder = mid % 8;
char rem = '0' + remainder; //转换成字符
oct = rem + oct;
mid /= 8;
}
return oct;
};
2.10进制——>2进制
对10进制整数一直%2,直至商为0,逆序排列余数即可得到2进制的数,整个过程与转换成8进制的过程基本一样。
3.10进制——>16进制
对10进制整数一直%16,直至商为0,逆序排列余数即可得到16进制的数,但要将余数大于9的依次取ABCDEF
string ToHex(int dec)
{
string hex = "";
while (dec > 0)
{
int remainder2 = dec % 16;
char rem;
switch (remainder2)
{
case 10: rem = 'A'; break;
case 11: rem = 'B'; break;
case 12: rem = 'C'; break;
case 13: rem = 'D'; break;
case 14: rem = 'E'; break;
case 15: rem = 'F'; break;
default: rem = '0' + remainder2; break;
};
hex = rem + hex;
dec /= 16;
}
return hex;
};
最后将两个过程链接起来就可以将任一进制的数转换成任意进制了。