以二进制转换为十进制为例:
基本规则:把二进制数按权展开、相加即得十进制数。
int toDecimal(string s, int radix){ //s是给定的radix进制字符串
int ans = 0;
for(int i = 0; i < s.size(); i++){
char t = s[i];
if(t >= '0' && t <= '9') ans = ans * radix + (t - '0');
else ans = ans * radix + (t - 'a' + 10);
}
return ans;
}
以十进制转换为二进制为例:
基本规则:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。
string convertToOtherRadix(int num, int radix) {
if (num == 0) return "0";
bool is_negative = num < 0;
if (is_negative) num = -num;
string ans;
while (num) {
int remainder = num % radix;//取余
if(remainder < 10){
ans = char('0' + remainder) + ans;//从最后一个余数读到第一个余数
} else {
ans = char('A' + remainder - 10) + ans;
}
num /= radix;
}
return is_negative? "-" + ans : ans;
}
itoa()函数(可以将一个10进制数转换为任意的2-36进制字符串)
用法:charitoa(int value,charstring,int radix);
#include
#include
using namespace std;
int main(){
int num = 10;
char str[10];
itoa(num, str, 16); //将十进制的10,转换为16进制,并存在字符串str中
printf("%s", str);
return 0;
}