将十进制数转换为十六进制数

4
在这段代码中,我们使用+55将十进制转换为十六进制数字。当temp值小于10时,我们使用+48将整数转换为字符。但是当temp大于等于10时,我们使用+55。那么+55是什么意思呢?
#include<stdio.h>
int main(){
    long int decimalNumber,remainder,quotient;
    int i=1,j,temp;
    char hexadecimalNumber[100];

    printf("Enter any decimal number: ");
    scanf("%ld",&decimalNumber);

    quotient = decimalNumber;

    while(quotient!=0){
         temp = quotient % 16;

      //To convert integer into character
      if( temp < 10)
           temp =temp + 48;
      else
         temp = temp + 55;

      hexadecimalNumber[i++]= temp;
      quotient = quotient / 16;
  }

    printf("Equivalent hexadecimal value of decimal number %d: ",decimalNumber);
    for(j = i -1 ;j> 0;j--)
      printf("%c",hexadecimalNumber[j]);

    return 0;
}

http://www.asciitable.com/ - Oliver Charlesworth
4个回答

8
在ASCII环境下,55等于'A'-10。这意味着加上55与减去10并加上'A'是一样的。
在ASCII中,'A''Z'的值是相邻和连续的,因此这将把10映射为'A',11映射为'B',以此类推。

6

temp的值小于10时,对应的ASCII码为48+temp

0 => 48 + 0 => '0'
1 => 48 + 1 => '1'
2 => 48 + 2 => '2'
3 => 48 + 3 => '3'
4 => 48 + 4 => '4'
5 => 48 + 5 => '5'
6 => 48 + 6 => '6'
7 => 48 + 7 => '7'
8 => 48 + 8 => '8'
9 => 48 + 9 => '9'

对于值为10或更高的情况,适当的字母55+temp
10 => 55 + 10 => 'A'
11 => 55 + 11 => 'B'
12 => 55 + 12 => 'C'
13 => 55 + 13 => 'D'
14 => 55 + 14 => 'E'
15 => 55 + 15 => 'F'

5
由于C语言中字符的ASCII编码,当余数(temp)小于十时,十六进制中的数字也在0到9的范围内。字符'0'到'9'的ASCII码在48到57的范围内。
当余数大于10时(始终小于15,因为余数运算%),十六进制数字在A到F的范围内,在ASCII中的范围是65到70。因此,temp + 55是从65到70的数字,因此给出了'A'到'F'范围内的字符。
更常见的做法是使用一个字符串char[] digits = "0123456789ABCDEF"; ,并将余数作为该字符串中的索引。你提出的方法(可能)也可以正常工作。

1
十六进制数是一种用16个符号表示的数字,这些符号是0-9的数字和A-F的字母。编写将十进制数转换为十六进制数的C程序的过程是:在每个步骤中将十进制数除以16并取余数。
在此过程中,使用0-9数字来表示余数为0-9,使用字母A、B、C、D、E、F来表示余数为10-15的数字。现在将所有余数按顺序从下往上组合,即A。这就是10(十进制)的十六进制数。
例如,要将十进制数10转换为十六进制数:
16 | 10 | 0 – A
现在将所有余数按顺序从下往上组合,即A。这就是10(十进制)的十六进制数。
程序逻辑:输入十进制数n,将n除以16(因为是十六进制),将余数保存在数组中,商保存在n中,重复此步骤直到n大于零。

查看程序,请访问: http://www.programmingsimplysolved.com/c-programs/c-program-to-convert-decimal-number-to-hexadecimal-using-functions/

贡献者:www.programmingsimplysolved.com


请在此处编写解决方案,而不是包含可能在未来失效的链接。谢谢! - Ignacio Ara
链接已损坏 - CoAstroGeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接