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


当前回答

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

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

其他回答

结合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);
}

使用以下命令将数字转换为十六进制字符串:

hexString = yourNumber.toString(16);

并通过以下方式反转该过程:

yourNumber = parseInt(hexString, 16);

我正在一个相当大的循环中转换为十六进制字符串,所以我尝试了几种技术以找到最快的方法。我的要求是得到一个固定长度的字符串,并正确编码负值(-1=>ff..f)。

Simple.toString(16)不适合我,因为我需要正确编码负值。以下代码是迄今为止我在1-2字节值上测试的最快的代码(请注意,符号定义了要获得的输出符号的数量,即对于4字节整数,它应该等于8):

var hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
function getHexRepresentation(num, symbols) {
    var result = '';
    while (symbols--) {
        result = hex[num & 0xF] + result;
        num >>= 4;
    }
    return result;
}

它在1-2字节的数字上比.toString(16)执行得更快,在更大的数字上(当符号>=6时)执行得更慢,但仍应优于正确编码负值的方法。

将十六进制颜色数字转换为十六进制颜色字符串:

使用toString和ES6 padStart将十六进制颜色数字转换为十六进制颜色字符串的简单解决方案。

const string = `#${color.toString(16).padStart(6, '0')}`;

例如:

0x000000将变为#0000000xFFFFFF将变为#FFFFFF

请在此处仔细检查此示例

如果要转换大整数,即大于Number.MAX_SAFE_INTEGER--9007199254740991的数字,则可以使用以下代码

const-hugeNumber=“9007199254740991873839”//确保其在字符串中const hexOfHugeNumber=BigInt(hugeNumber).toString(16);console.log(hexOfHugeNumber)