十进制转十六进制,八进制和二进制_C语言
程序员文章站
2022-03-08 18:49:45
...
printf有提供部分可直接输出进制转换的捷径:
#include<stdio.h>
int main () {
int num;
scanf("%d", &num);
printf("hex = %#x\nHEX = %#X\noct = 0%o", num, num, num);
return 0;
}
示例结果:
但似乎也没有二进制的直接输出捷径,况且单单用printf就得到结果,也太枯燥了吧,所以还是得折腾一下自己:
#include<stdio.h>
#define MAX 1000
// 10->16
void DEC_HEX (int DEC) {
char result[MAX]; // 用于存储结果,十六进制需要用到字母表示i,所以需要字符数组
int i = 0;
while (DEC) {
if(DEC % 16 < 10) { // 小于10都用数字0~9表示,具体转换算法查看ASCII码表
result[i++] = (char)(DEC%16+48);
} else { // 大于等于10需要用到字母A~F表示
result[i++] = (char)(DEC%16+55);
}
DEC /= 16;
}
printf("HEX = 0x");
// 逆序输出正确结果
for(i = i-1; i >= 0; i --) {
printf("%c", result[i]);
}
printf("\n");
}
// 10->8
void DEC_OCT (int DEC) {
int result[MAX];
int i = 0;
while (DEC) {
result[i++] = DEC%8;
DEC /= 8;
}
printf("OCT = 0");
for(i = i-1; i >= 0; i --) {
printf("%d", result[i]);
}
printf("\n");
}
// 10->2
void DEC_BIN (int DEC) {
int result[MAX];
int i = 0;
while (DEC) {
result[i++] = DEC%2;
DEC /= 2;
}
// 更加美观输出二进制结果,需要给结果前面补零
int j;
for(j = 0; j < i%4; j ++) {
result[i++] = 0;
}
// 并且用变量time计数,每四位插一个空格
int time = 0;
printf("BIN = ");
for(i = i-1; i >= 0; i --) {
printf("%d", result[i]);
time ++;
if(time == 4) {
time = 0;
printf(" ");
}
}
printf("\n");
}
int main () {
// 16进制HEX 10进制DEC 8进制OCT 2进制BIN
int HEX, DEC, OCT, BIN;
printf("DEC = ");
scanf("%d", &DEC);
DEC_HEX(DEC);
DEC_OCT(DEC);
DEC_BIN(DEC);
return 0;
}
示例结果: