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

use*_*619 0 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
Run Code Online (Sandbox Code Playgroud)

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

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

感谢您的答复.那么数组是我问题的答案吗?我现在还没有完全理解它们,但是要感谢你们正确的方向.

Eli*_*gem 7

sprintf说实话,我只是用它:

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

完成工作......
完整的,您的代码可能看起来像:

#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;
}
Run Code Online (Sandbox Code Playgroud)

甚至:

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


Eut*_*rpy 6

创建一个数组并将剩余内容写入其中:

int array[50];
int counter=0;

[...]

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

   array[counter]=number%16;
   number/=16;
   ++counter;
}
Run Code Online (Sandbox Code Playgroud)

该行array[counter]=number%16;意味着数组中的第一个元素将为 number%16 - 第二个元素将为 (number/16)%16 等。

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

(这里考虑到你有一个限制 -int array[50];因为,如果你的数量非常大并且你有超过 50 个遗骸,会发生什么?解决方案是动态地编写这个,但我认为你不应该担心这一点这点。)

  • @EliasVanOotegem:无需为真实的事情道歉。我只是相信,如果把这样的任务交给一个 C 初学者,那是因为它方便学习一些基本概念……一旦你学会了这个例子,你当然会使用尽可能简单的方法。:) (2认同)