繁体   English   中英

在没有Javascript内置函数的情况下将十进制转换为十六进制

[英]Convert decimal to hexadecimal without Javascript builtin functions

尝试将基数10转换为基数16:

            var hex = []; //array for hexadecimals

            while (num > 0) { //if num greater than 0 loop will run

                hex=(num%16); //divides num by 16

                if (hex>9) {
                    if (hex==10) {
                        hex.unshift("A")
                    }
                    if (hex==11) {
                        hex.unshift("B")
                    }
                    if (hex==12) {
                        hex.unshift("C")
                    }
                    if (hex==13) {
                        hex.unshift("D")
                    }
                    if (hex==14) {
                        hex.unshift("E")
                    }
                    if (hex==15) {
                        hex.unshift("F")
                    }
                }

                if (hex<=9) {
                    hex.unshift(hex)
                }


            }

            alert("That decimal in hexadecimal is " + hex.join(''));
        }
    }

无论出于何种原因,这段代码对我都不起作用...有什么想法吗? 我正在尝试将10,11,12,..替换为A,B,C,...,但是似乎无法正常工作。 我尝试使用if else语句,但是在运行代码时会崩溃。

在您的原始代码中,您没有更新num而您似乎误解了%工作原理, %是模数而不是除法。

如果您不确定在碱基之间进行转换的方式,则可以查看此方法 ,也可以仅通过Google进行查看,那里有很多关于该算法的视频和网站。

JavaScript的

var number = 123456; //The input value
var hexCharacters = ["A", "B", "C", "D", "E", "F"]; //Digits for 10-15, eliminates having case statements
var hexString = "";

while (number > 0) {
  var mod = number % 16; //Get the remainder
  number = Math.floor(number / 16); //Update number

  //Prepend the corresponding digit
  if (mod > 9) {
    hexString = hexCharacters[mod - 10] + hexString; //Get the digits for 10-15 from the array
  } else {
    hexString = mod.toString() + hexString;
  }
}

小提琴

快速解决方案

在您的while循环中将此行添加在hex=(num%16)行之后的某处

num = Math.floor(num / 16);

说明

您的逻辑是正确的,您只是忘记了(或不知道%没有)将num除以16。

查看以下行(代码中的第5行):

hex = (num % 16);     //divides num by 16

当num除以16时,它将得到余数,并将其存储为十六进制。 到目前为止,这是正确的,因为您需要知道该值是多少。

但是,在您的注释中,您注意到该行"divides num by 16" 不是真的。 它仅得到剩余是什么, 如果是16分,你还有做分割自己。

这行可以完成:

num = Math.floor(num / 16);

在您的while循环中。 当然,您仍然需要行hex=(num%16); 我建议您在第一行hex=(num%16);之后添加新行hex=(num%16); ,因此其目的很明确。

您编辑的代码可能像这样循环:

var hex = [];    // array for hexadecimals

while (num > 0) {    // if num greater than 0 loop will run

    hex = (num % 16);          // Gets remainder when num is divided by 16
    num = Math.floor(num / 16) // Actually divides num by 16

    if (hex > 9) {
        .
        .
        .

但我还是建议amura.cxg的答案,因为amura.cxg显示了一种非常不错的方式来重新格式化代码,从而使代码编写得井井有条,简洁明了。

我只发布我的答案,以便我可以在错误时准确地向您显示代码的位置,因为我认为这些信息对您非常有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM