在javascript中将十六进制颜色转换为整数

Xas*_*sun 2 javascript colors

我正在尝试在 javascript 中将十六进制颜色字符串转换为 int。

颜色 int 必须与 VB6 格式相同。我认为字节的顺序不正常。例如:255 是红色 (#ff0000) 和 16776960 是 Aqua (#00ffff)

我有一个函数可以做相反的事情:(但评论中有人告诉我这是不正确的)

function VBColorToHEX(i) {
    var hex = (i & 0xFF).toString(16) +
              ((i >> 8) & 0xFF).toString(16) +
            ((i >> 16) & 0xFF).toString(16) +
            ((i >> 24) & 0xFF).toString(16);

    hex += '000000';
    hex = hex.substring(0, 6);
    return "#" + hex;
}
Run Code Online (Sandbox Code Playgroud)

但是无法编写一个函数来返回我的初始值。

你能帮助我吗?

编辑:

我通过填充每个单独的颜色来纠正我的原始函数:

function VBColorToHEX(i) {
   var r = (i & 0xFF).toString(16);
   var g = ((i >> 8) & 0xFF).toString(16);
   var b = ((i >> 16) & 0xFF).toString(16);

   r = ('0' + r).slice(-2);
   g = ('0' + g).slice(-2);
   b = ('0' + b).slice(-2);

   return "#" + r + g + b;
}
Run Code Online (Sandbox Code Playgroud)

and*_*ndi 5

Here's a working version of your original function, which I think will make more sense to you about how it actually works.

function VBColorToHEX(i) {
    var bbggrr =  ("000000" + i.toString(16)).slice(-6);
    var rrggbb = bbggrr.substr(4, 2) + bbggrr.substr(2, 2) + bbggrr.substr(0, 2);
    return "#" + rrggbb;
}
Run Code Online (Sandbox Code Playgroud)

Then, to do the reverse, do this:

function HEXToVBColor(rrggbb) {
    var bbggrr = rrggbb.substr(4, 2) + rrggbb.substr(2, 2) + rrggbb.substr(0, 2);
    return parseInt(bbggrr, 16);
}
Run Code Online (Sandbox Code Playgroud)