【问题标题】:How come my binary number isn't properly converting to hexadecimal?为什么我的二进制数没有正确转换为十六进制?
【发布时间】: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 时。知道为什么吗?
  • 所有变量定义都丢失了,很难说。您可以添加一个完整的示例,并对问题进行任何修复。

标签: c binary hex decimal


【解决方案1】:

追踪它,我看到了:

hex[-1] = 'C'
hex[0] = '3'

我怀疑你的意思

hexResult[returnHex++] = 48 + remainder

而不是

hexResult[returnBinary++] = 48 + remainder

假设 returnHex 初始化为零。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2016-08-28
    • 2016-09-15
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多