首页 > 解决方案 > 为什么我的二进制数没有正确转换为十六进制?

问题描述

我试图通过先将二进制数转换为十进制,然后再转换为十六进制来将二进制数转换为十六进制数。

当我单独运行将十进制转换为十六进制的部分时,它工作正常,但每当我尝试同时运行两者时,它都不起作用?


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。

标签: cbinaryhexdecimal

解决方案


跟踪它,我看到:

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

我怀疑你的意思是

hexResult[returnHex++] = 48 + remainder

代替

hexResult[returnBinary++] = 48 + remainder

假设 returnHex 初始化为零。


推荐阅读