[英]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.