一、16进制转换
在C++中,可以使用格式化输出函数“printf”将十进制数以16进制的形式输出。如:
#includeint main(){ int n = 255; printf("%x", n); //输出ff return 0; }
而将16进制数转换为10进制数,则可以使用数学运算,如:
#include#include using namespace std; int hexToDec(string hex){ //hex为十六进制数字符串 int dec = 0; int len = hex.size(); for(int i = 0; i < len; i++){ int temp = 0; if(hex[i] >= '0' && hex[i] <= '9'){ temp = hex[i] - '0'; }else if(hex[i] >= 'A' && hex[i] <= 'F'){ temp = hex[i] - 'A' + 10; }else if(hex[i] >= 'a' && hex[i] <= 'f'){ temp = hex[i] - 'a' + 10; } dec += temp * pow(16, len - i - 1); } return dec; } int main(){ string hex = "ff"; cout << hexToDec(hex); //输出255 return 0; }
二、C语言进制转换规则
C语言中,数字的字面量可以表示为以下形式:
整型字面量:十进制、八进制(以0开头)、十六进制(以0x或0X开头)
浮点型字面量:十进制、科学计数法(e或E表示乘以10的几次方)
字符型字面量:单引号括起来的字符
三、C进制转换函数
C语言中,可以使用“atoi”、“atof”、“strtod”等函数来进行进制转换。
例如:
#include#include int main(){ char* str1 = "11"; printf("%d", atoi(str1)); //输出11 char* str2 = "11.22"; printf("%f", atof(str2)); //输出11.220000 char* str3 = "11.22"; printf("%f", strtod(str3, NULL)); //输出11.220000 return 0; }
四、C进制转换代码
以下代码实现将一个10进制数转换为另一种进制数:
#includeusing namespace std; int main(){ int n = 255; int base = 16; string res = ""; while(n > 0){ int temp = n % base; if(temp >= 10) res = char(temp - 10 + 'A') + res; else res = char(temp + '0') + res; n /= base; } cout << res; //输出FF return 0; }
五、进制转换器C
以下是一个基于C++开发的简易进制转换器:
#include#include using namespace std; int decToAny(int n, int base){ string res = ""; while(n > 0){ int temp = n % base; if(temp >= 10) res = char(temp - 10 + 'A') + res; else res = char(temp + '0') + res; n /= base; } cout << res; return 0; } int anyToDec(string any, int base){ int dec = 0; int len = any.size(); for(int i = 0; i < len; i++){ int temp = 0; if(any[i] >= '0' && any[i] <= '9'){ temp = any[i] - '0'; }else if(any[i] >= 'A' && any[i] <= 'F'){ temp = any[i] - 'A' + 10; }else if(any[i] >= 'a' && any[i] <= 'f'){ temp = any[i] - 'a' + 10; } dec += temp * pow(base, len - i - 1); } return dec; } int main(){ int op = 0; while(true){ cout << "请选择转换方式:" << endl; cout << "1. 10进制转x进制" << endl; cout << "2. x进制转10进制" << endl; cin >> op; if(op == 1){ int n = 0, base = 0; cout << "请输入需要转换的十进制数:" << endl; cin >> n; cout << "请输入需要转换的进制数(2~16):" << endl; cin >> base; if(base >= 2 && base <= 16){ cout << "转换结果为:" << endl; decToAny(n, base); break; } }else if(op == 2){ string any = ""; int base = 0; cout << "请输入需要转换的数字:" << endl; cin >> any; cout << "请输入该数字的进制(2~16):" << endl; cin >> base; if(base >= 2 && base <= 16){ cout << "转换结果为:" << endl; cout << anyToDec(any, base); break; } } } return 0; }