所以我用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
但我怎么可以使程序在循环过程中创建的变量? 我一定要使用完整的不同方法? 我看了看其他十进制为十六进制转换器,我不完全得到他们如何工作。
就像我说我是一个绝对的初学者很抱歉,如果这个问题是愚蠢的。
感谢您的答复。 所以数组是回答我的问题呢? 我不完全正确的,现在明白他们,但感谢你在正确的方向点。
做一个阵列和写在它的遗迹:
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具遗体会发生什么解决办法是动态地写这篇文章,但我不觉得吗?你应该担心的是在这一点上。)
我会简单地使用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);
如果您希望能够得到大小不限数量,你需要使用动态数组。 首先你得到的输入长度由循环,然后根据需要分配阵列。 你需要增加在循环的索引,并将当前值数组[索引]。
刚刚尝试这一点:
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);
// decimal to hex converter
char* dec2hex(int num){
int rem = 0,i=0;
char hex[3];
while(num > 0 && i >=0){
rem = num%16;
hex[i] = rem<10 ? (char)rem+48 : (char)rem+55;
num/=16;
i++;
}
hex[i]='\0';
return strrev(hex);
}