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


当前回答

结合RGB值到十六进制函数的一些好主意(在HTML/CSS的其他地方添加#):

function rgb2hex(r,g,b) {
    if (g !== undefined)
        return Number(0x1000000 + r*0x10000 + g*0x100 + b).toString(16).substring(1);
    else
        return Number(0x1000000 + r[0]*0x10000 + r[1]*0x100 + r[2]).toString(16).substring(1);
}

其他回答

如果您需要处理位字段或32位颜色之类的事情,那么您需要处理带符号的数字。JavaScript函数toString(16)将返回一个负十六进制数,这通常不是您想要的。这个函数做了一些疯狂的加法,使其成为正数。

函数decimalToHexString(数字){如果(数字<0){number=0xFFFFFFFF+number+1;}return number.toString(16).toUpperCase();}console.log(decimalToHexString(27));console.log(decimalToHexString(48.6));

您可以在ECMAScript 6中执行以下操作:

const toHex = num => (num).toString(16).toUpperCase();

正如公认的答案所述,从十进制转换为十六进制的最简单方法是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.

限制/填充到一组字符数:

function decimalToHex(decimal, chars) {
    return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}
function toHex(d) {
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}