【发布时间】:2019-08-31 07:28:56
【问题描述】:
我正在尝试通过先将二进制数转换为十进制,然后再转换为十六进制来将二进制数转换为十六进制数。
当我单独运行将十进制转换为十六进制的部分时,它可以正常工作,但每当我尝试同时运行这两个部分时,它都不起作用?
for (returnBinary = length - 1; returnBinary > -1; returnBinary--) {
if (input[returnBinary] == '1') {
binDec = binDec + power(2, length - returnBinary - 1);
}
}
// decimal to hex
while (binDec != 0) {
remainder = binDec % 16;
if (remainder < 10) {
hexResult[returnBinary++] = 48 + remainder;
} else {
hexResult[returnBinary++] = 55 + remainder;
}
binDec = binDec / 16;
}
// print in reverse
printf("Your hexadecimal value is: 0x");
for (returnHex2 = returnHex; returnHex2 >= 0; returnHex2--) {
printf("%c", hexResult[returnHex2 - 1]);
}
每个部分单独工作都很好,但是放在一起就不起作用了。
EG:将十进制数 60 转换为十六进制可以正常工作,但是当转换相当于 60 (111100) 的二进制时,它给出的结果是 0xC,而它应该是 0x3C。
【问题讨论】:
-
与问题无关,但您将数字的表示与值混淆了。您没有在代码中使用任何十进制表示。
binDec无论如何都不是十进制的。int只保存一个值,既不是十进制,也不是十六进制或八进制。 -
除了索引的主要问题之外,您还可以改进两件事:不要使用幻数。使用
'0'代替48和'A'-10代替65。你也可以从右到左填充你的数组,而不需要倒置打印结果。 -
@Gerhardh 我希望你也能帮助我,但是当我输入一个大数字转换为十六进制时,它会打印出一堆乱码(前面有 0x)。例如,3245678765 转换为 0x-"(!+- 当它应该是 0xC17520AD 时。知道为什么吗?
-
所有变量定义都丢失了,很难说。您可以添加一个完整的示例,并对问题进行任何修复。