如何在C中创建十进制到十六进制转换器

时间:2013-11-18 12:17:00

标签: c hex decimal

所以我是C的绝对初学者,我必须制作十进制到十六进制的转换器。

所以我想我需要创建一个循环,直到结果为0。

但是如何让它记住所有遗留物呢?这个数字将用scanf输入,所以我不能为它定制代码。

现在我想做这样的事情

while(number(n)!=0)
{
    number0 / 16 = number1
    number0 % 16 = remainder0
    number1 / 16 = number2
    number1 % 16 = remainder1
    .....
    number(n-1) / 16 = 0
    number(n-1) % 16 = lastremainder
}

hex = lastremainder, ..., remainder2, remainder1, remainder0

但是如何让程序在循环期间创建变量?我必须使用完全不同的方法吗?我看了看其他的十进制到十六进制转换器,我不太明白它们是如何工作的。

就像我说我是一个绝对的初学者,如果这个问题很愚蠢,那就很抱歉。

感谢您的回复。那么数组是我问题的答案吗?我现在还不完全理解他们,但是谢谢你们正确的方向。

5 个答案:

答案 0 :(得分:7)

说实话,我只是简单地使用sprintf

char hex[10];
sprintf(&hex, "%x", INT_MAX);//INT_MAX macro requires limits.h, though...
printf("%s\n", hex);//prints 7fffffff

完成工作......
完整的,您的代码可能类似于:

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

int main()
{
    char hex[10];
    int input;
    scanf("%d", &input);
    sprintf(&hex, "%x", input);
    printf("The number %d, turned to hexadecimal is: %s\n", input, hex);
    return 0;
}

甚至:

    int input;
    scanf("%d", &input);
    printf("The number %d, turned to hexadecimal is: %x\n", input, input);

答案 1 :(得分:2)

制作一个数组并在其中写下遗骸:

int array[50];
int counter=0;

[...]

while(number!=0)
{
   [...]

   array[counter]=number%16;
   number/=16;
   ++counter;
}

array[counter]=number%16;表示数组中的第一个元素是数字%16 - 第二个元素是(数字/ 16)%16等。

您需要counter知道数组中有多少元素(剩余多少),以便稍后可以向后写入它们。

(在这里考虑一下你有一个限制 - int array[50];因为,如果你的号码真的很大并且剩下50个以上,会发生什么?解决方案是动态写这个,但我不知道我认为你现在应该担心这一点。)

答案 2 :(得分:-1)

如果您希望能够获得无限大小的数量,则需要使用动态数组。 首先通过循环获取输入长度,然后根据需要分配数组。 你需要增加循环中的索引并将当前值放在array [index]中。

答案 3 :(得分:-1)

试试这个:

    char hex = [], finalHex = [];
while(num != 0) {
num = num/16;
rem = num%16;
switch(rem) {
case 0 : 
hex = '0';
break;
case 1 : 
hex = '1';
break;
case 2 : 
hex = '2';
break;
case 3 : 
hex = '3';
break;
case 4 : 
hex = '4';
break;
case 5 : 
hex = '5';
break;
case 6 : 
hex = '6';
break;
case 7 : 
hex = '7';
break;
case 8 : 
hex = '8';
break;
case 9 : 
hex = '9';
break;
case 10 : 
hex = 'A';
break;
case 11 : 
hex = 'B';
break;
case 12 : 
hex = 'C';
break;
case 13 : 
hex = 'D';
break;
case 14 : 
hex = 'E';
break;
case 15 : 
hex = 'F';
break;
}
strcat(hex, finalHex);
finalHex = hex;
}
 printf("%s", finalHex);

答案 4 :(得分:-1)

Add-ADGroupMember ... 2>> 'C:\error.log'