十进制转十六进制:难点在与如何将超过9的数值转换成字母存储在字符数组中,解决方法是,事先准备一个十六进制每位值的数组dir,之后将待求数对16取余,每次所得的数作为dir的下标,此时dir下标所指向得值就是一次对16取余所求的值,之后将值赋值到指定位置即可。要注意的是dir数组的值从0开始。

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>


void main() {

    char dir[17] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; //预先准备十六进制数值表

    char y[50]; //存储结果数组

    int a ,f;

    int index = 0;//存储结果数组的下标

    int temp; //存储十六进制数值表的下标

    scanf_s("%d", &a);

    f = a;

    bool b = true;

    while (b) {

        temp = a % 16;

        y[index++] = dir[temp]; // 对16取余,每次所得的数作为dir的下标,此时dir下标所指向得值就是一次对16取余所求的值,将值赋给y数组

        a /= 16; //更新a的值

        if (a == 0) {

            b = false; //为0时退出

        }
    }

    for (int i = index - 1; i >= 0; i--) {

        printf("%c", y[i]);

    }

    printf("\n");

    printf("校正信息 %d 的正确十六进制数值是: %x", f, f);
}