c++转换进制问题(stoi函数)

思路:不管输入是哪种进制,先统一转换成一种特定的通用的进制(中转者),再转换成指定进制。

最合适的中转者—>十进制。

原因1:使用stoi函数可以将其他进制的数转换成10进制

//stoi函数的基本使用方法
stoi(str,nullptr,2); //str是要转换的表达式,nullptr是默认的起始位置,第三个参数是原进制,最后会返回十进制的整数

原因2:10进制可以用取余的方法转换成任意进制

  1. 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;
};

最后将两个过程链接起来就可以将任一进制的数转换成任意进制了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值