首页 > 解决方案 > 用js将十六进制颜色转换为int32值

问题描述

我有这个值:-16744448;而这个值就是这个颜色:与 -16744448 关联的颜色

现在,我需要知道如何将十六进制中的任何值更改 '#01ff00', '#7fff82', '#c1ffc0', '#16F6F5','#81FFFC','#BFFFFF' 为 int32(必须)

function toColor(num) {
    num >>>= 0;
    var b = num & 0xFF,
        g = (num & 0xFF00) >>> 8,
        r = (num & 0xFF0000) >>> 16,
        a = ( (num & 0xFF000000) >>> 24 ) / 255 ;
    return "rgba(" + [r, g, b, a].join(",") + ")";
}

我使用了这个公式,但我不知道如何应用逆向工程。

编辑:

我在数据库中有这个值:-16744448,使用公式我有这个颜色值:'#008000',我需要在 -16744448 中再次转换这个颜色。

当我使用评论中提到的公式时,我得到:32768

这个值来自VB.net,这个函数:Color.FromArgb

标签: javascripthex

解决方案


我们正在删除“#”,将十六进制解析为十进制,补足 16^6。
Back:
不补码,以前导零填充十六进制字符串,修剪到最后 6,在开头添加“#”。

var values=["#008000",'#01ff00', '#7fff82', '#c1ffc0', '#16F6F5','#81FFFC','#BFFFFF'];

values.forEach(v=>{
  var r=parseInt(v.slice(-6),16)-Math.pow(16,6);
  var rr="#"+("0".repeat(6)+(Math.pow(16,6)+r).toString(16)).slice(-6);
  console.log(v,r,rr);
});
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读