从颜色转换回 javascript 中的数字

convert from a color back to a number in javascript

我有一个执行以下操作的现有 fn:

    public GetColor = (argb: number) => {

        var a = 1;// (argb & -16777216) >> 0x18; // gives me FF


        var r = (argb & 0xff0000) >> 0x10;
        var g = (argb & 0x00ff00) >> 0x8;
        var b = (argb & 0x0000ff);
        var curKendoColor = kendo.parseColor("rgba(" + r + "," + g + "," + b + "," + a + ")", false);

我想知道 return 返回数字所需的函数。

例如,如果我有 (FFFF0000) 的 AARRGGBB,我想返回到 toColor 派生的数字版本。

我可以使用 return 号码的未签名版本或签名版本。 Unsigned 会是 -65536,但 unsigned 也可以(不确定我现在想到的是什么数字)

我尝试这样做,但尝试都以 0 结束,我知道这是不正确的: colorSend |= (parseInt(this.Color.substr(0,2),16) & 255) << 24; colorSend |= (parseInt(this.Color.substr(1, 2), 16) & 255) << 16; colorSend |= (parseInt(this.Color.substr(3, 2), 16) & 255) << 8;

parseInt 给出了我期望的 255,0,0,但是 & 和移位逻辑似乎不正确,因为 & 将整数归零,因此结果为 0

其实很简单。您只需要了解 HEX 值的含义即可。 在十六进制系统中,从 10 到 15 的每个数字都由字母 A 到 F 表示。小十位数字是正常数字 1 - 9。因此,如果你想将 11 转换为十六进制,则为 0B。因为你不需要低于 11 (0) 的数字,字母 B 代表 11。如果你阅读了一些关于十六进制系统的知识,你应该能够很容易地编写你的新函数;)

好的,我得到了一些似乎对我有用的东西。我稍微简化了一点,但对于 ARGB,我可以做类似

的事情
val = "0xFFFF0000"
val = parseInt(val, 16)
if((val & 0x80000000) != 0)
{
   val = val - 0x100000000;
}

例如,对于 A 为 FF 的红色,我会得到- -65536 或 unsigned 我可以省略最后一部分。