没有Javascript内置函数,将十进制转换为十六进制

时间:2016-04-14 22:10:06

标签: javascript

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

public string Test03(IEnumerable<string> str1)
        {
            // call with two parameters and return them back
            list = str1;

            return list.FirstOrDefault().ToString();
        }

无论出于何种原因,这段代码对我不起作用......任何想法?我试图用A,B,C替换10,11,12,......但是它似乎并没有起作用。我尝试使用if else语句,但是当我运行代码时它会崩溃。

2 个答案:

答案 0 :(得分:2)

在您的原始代码中,您没有更新num,看起来您误解了%的工作原理,%是模数而非分割。

如果你不确定基地之间的转换是如何工作的,你可以查看this或只看谷歌,有很多关于算法的视频和网站。

<强>的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;
  }
}

<强> Fiddle

答案 1 :(得分:1)

快速解决方案

在行hex=(num%16)

之后的某个地方的while循环中添加此行
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);之后添加新行,因此其目的很明确。

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

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 显示了一种非常好的方法来重新格式化代码,以便它编写得很好,清晰,简洁。

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