根据要求,将此作为 awswer 发布
var stringHexNumber = ( // 1
parseInt( // 2
parseInt('mj3bPTCbIAVoNr93me1I', 36) // 3
.toExponential() // 4
.slice(2,-5) // 5
, 10) & 0xFFFFFF // 6
).toString(16).toUpperCase(); // "32EF01" // 7
发生什么了?
- 事情从转换为Integer
3
开始,例如,通过将其解释为 base-36 数字。 'mj3bPTCbIAVoNr93me1I'
x
- 接下来,将其作为String on line
x
放入指数形式。这是因为有这么多字符,可能会很大,这个例子就在身边,所以把它转换成一个非常标准的形式。 4
x
8e30
- 在此之后,行
5
修剪开头和结尾,因此您将只剩下数字,例如'8.123e+30'.slice(2, -5)
变为'12'
.
- 现在我们回到 line
2
,它再次转换回Integer,这次是以 10 为底。
- 然后, line使用快速按位AND
6
将此数字截断到范围内。这也将转换为.0..16777215 (=== 0xFFFFFF)
NaN
0
- 最后,line通过在 base 中写入数字并更改大小写,
7
将其转换回我们习惯于查看颜色的大写十六进制格式。16
如果您想使用它,您可能还需要确保最终数字是6
数字并在前面粘贴 a #
,这可以通过
'#' + ('000000' + stringHexNumber).slice(-6); // "#32EF01"