我正在将数字从10个计数系统(c.s.)转换为另一个,并将其打印到文件中。
void Fileoutkey(char *res1, char *res2, int sys1, int sys2) //KANON
{
FILE *fp;
if(fp = fopen("task_out.cpp", "w"))
{
fprintf(fp, "%d: %s\n", sys1, res1);
fprintf(fp, "%d: %s\n", sys2, res2);
fclose(fp);
}
else
{
printf("No such file in directory.\n");
exit(1);
}
}
转换功能(可以)
int numSystem1 = 12;
char digits1 [13] = "0123456789AB";
char result1 [18] = "";
int digCount1 = 0;
while (num)
{
int rem1 = num % numSystem1;
result1 [digCount1] = digits1[rem1];
num /= numSystem1;
digCount1++;
for (int i = digCount1; i >= 0; i--)
{
cout << result1[i]; //here i get 10
}
}
从10到12 c.s.转换时例如,数字12
而不是10
我得到01
。
控制台中的输出是正确的。
答案 0 :(得分:5)
转换代码绝对无效。以将12从10转换为12的示例为例,循环执行以下操作:
第一次在num
周围是12。12 % 12
是0-因此存储为字符串的第一个字符。 num
然后除以12等于1。
1 % 12
周围的第二时间是1,并被添加为第二个字符。这意味着您的字符串现在包含“ 01”。这就是您在输出中看到的-代码正在以相反的顺序添加数字。
您可以算出数字的大小,然后从数字开始倒数以在另一个方向添加字符,或者使用反转字符串。
在循环之后,还需要添加NUL终止符,如下所示:
result1 [digCount1] = '\0';