如何在JavaScript中将十进制值转换为十六进制值?
当前回答
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;
}
其他回答
对于任何感兴趣的人,这里有一个JSFiddle比较了这个问题的大多数答案。
下面是我最终采用的方法:
function decToHex(dec) {
return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}
此外,请记住,如果您希望将十进制转换为十六进制,以便在CSS中用作颜色数据类型,那么您可能更喜欢从十进制中提取RGB值并使用RGB()。
例如(JSFiddle):
let c = 4210330 // your color in decimal format
let rgb = [(c & 0xff0000) >> 16, (c & 0x00ff00) >> 8, (c & 0x0000ff)]
// Vanilla JS:
document..getElementById('some-element').style.color = 'rgb(' + rgb + ')'
// jQuery:
$('#some-element').css('color', 'rgb(' + rgb + ')')
这将#some元素的CSS颜色属性设置为rgb(64、62、154)。
使用以下命令将数字转换为十六进制字符串:
hexString = yourNumber.toString(16);
并通过以下方式反转该过程:
yourNumber = parseInt(hexString, 16);
我还没有找到一个明确的答案,如果不检查它是负数还是正数,那就是使用二的补码(包括负数)。为此,我展示了一个字节的解决方案:
((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);
}
没有循环:
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++){}
如果数字是负数?
这是我的版本。
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);
}