一、16进制转换
在C++中,可以使用格式化输出函数“printf”将十进制数以16进制的形式输出。如:
#include <stdio.h>
int main(){
int n = 255;
printf("%x", n); //输出ff
return 0;
}
而将16进制数转换为10进制数,则可以使用数学运算,如:
#include <iostream>
#include <cmath>
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 <stdlib.h>
#include <stdio.h>
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进制数转换为另一种进制数:
#include <iostream>
using 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 <iostream>
#include <cmath>
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;
}