对一种十进制转十六进制的方案的代码方案进行了改进,是巩固对十六进制ACII码的认识和应用,以下内容尚有一定的缺陷,比如对于负数的16进制数并未进行编写。
// ————————————————
// 版权声明:本文为CSDN博主「freedom1013」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
// 原文链接:https://blog.csdn.net/freedom1013/article/details/1319413
/*
**DESCRIPTION:convert deciaml to hex
**Author:liy
**DATE:8-12-2006
*/
/*
**Author:xwj
**本人在原来的函数基础上加以改进,使其输出更符合人的习惯,更改部分内容使其逻辑更为合理
**date:2023/9/17
*/
#include <stdio.h>
#include <math.h>
void dec2hex(int );
int main(){
int num;
printf("Input a decimal number:");
scanf("%d",&num);
if(num<0) puts("error");
else dec2hex(num);
system("pause");
}
/*
**data: dec //10进制数
**function:10进制转16进制
**examples: dec2hex(num); num为使用者自行定义的键入数字,
*/
void dec2hex(int dec){
int n, i,j;
int len = 0;
char str[20];
int temp_dec = dec;
if(temp_dec >=16){
while(temp_dec != 0){
temp_dec /= 16;
len++;
}
i = len - 1;
while(dec != 0){
n = dec % 16;
dec /= 16;
if(n < 10){
str[i--] = n + '0';
}
else{
str[i--] = (n - 10) + 'a';
}
}
printf("The number HEX is :");
fputs("0x",stdout);
puts(str);
}
else if (temp_dec==0)
{
puts("The number HEX is : 0");
}
else
{
while(temp_dec != 0){
temp_dec /= 16;
len++;
}
i = len - 1;
while(dec != 0){
n = dec % 16;
dec /= 16;
if(n < 10){
str[i--] = n + '0';
}
else{
str[i--] = (n - 10) + 'a';
}
}
printf("The number HEX is :");
fputs("0x0",stdout);
puts(str);
}
}