如何在JavaScript中将十进制值转换为十六进制值?


当前回答

正如公认的答案所述,从十进制转换为十六进制的最简单方法是var hex=dec.toString(16)。但是,您可能更喜欢添加字符串转换,因为它可以确保像“12”.toString(16)这样的字符串表示正确工作。

// Avoids a hard-to-track-down bug by returning `c` instead of `12`
(+"12").toString(16);

为了扭转这个过程,您也可以使用下面的解决方案,因为它更短。

var dec = +("0x" + hex);

在Google Chrome和Firefox中,速度似乎较慢,但在Opera中则明显更快。看见http://jsperf.com/hex-to-dec.

其他回答

我还没有找到一个明确的答案,如果不检查它是负数还是正数,那就是使用二的补码(包括负数)。为此,我展示了一个字节的解决方案:

((0xFF + number +1) & 0x0FF).toString(16);

您可以将此指令用于任意数量的字节,只需在相应的位置添加FF。例如,设置为两个字节:

((0xFFFF + number +1) & 0x0FFFF).toString(16);

如果要将数组整数强制转换为十六进制字符串:

s = "";
for(var i = 0; i < arrayNumber.length; ++i) {
    s += ((0xFF + arrayNumber[i] +1) & 0x0FF).toString(16);
}

AFAIK评论57807是错误的,应该是这样的:var hex=数字(d).toString(16);而不是var hex=parseInt(d,16);

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}

下面的代码将十进制值d转换为十六进制。它还允许您向十六进制结果添加填充。因此默认情况下0将变为00。

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}

如果数字是负数?

这是我的版本。

function hexdec (hex_string) {
    hex_string=((hex_string.charAt(1)!='X' && hex_string.charAt(1)!='x')?hex_string='0X'+hex_string : hex_string);
    hex_string=(hex_string.charAt(2)<8 ? hex_string =hex_string-0x00000000 : hex_string=hex_string-0xFFFFFFFF-1);
    return parseInt(hex_string, 10);
}

没有循环:

function decimalToHex(d) {
  var hex = Number(d).toString(16);
  hex = "000000".substr(0, 6 - hex.length) + hex;
  return hex;
}

// Or "#000000".substr(0, 7 - hex.length) + hex;
// Or whatever
// *Thanks to MSDN

另外,不使用必须评估的循环测试不是更好吗?

例如,代替:

for (var i = 0; i < hex.length; i++){}

have

for (var i = 0, var j = hex.length; i < j; i++){}