Javascript 将颜色通道字节打包为有符号整数,并正确显示为十六进制

Javascript 将颜色通道字节打包为有符号整数,并正确显示为十六进制,javascript,colors,hex,unsigned-integer,Javascript,Colors,Hex,Unsigned Integer,我正在尝试将颜色通道字节打包为有符号整数,但生成的整数将无法正确显示为十六进制,因为它是有符号的。有没有一种简单的方法可以在JavaScript中实现这一点。不幸的是,我不能声明无符号整数 #-FFFF01或-16776961 应导致: #FF0000FF或4278190335 [ ['rgba(255,0,0,1.0)', [‘rgb(34、12、64)’, [“rgb(34,12,64,0.6)”, ['rgba(34,12,64,0.6)', [“rgb(34 12 64/0.6)”,

我正在尝试将颜色通道字节打包为有符号整数,但生成的整数将无法正确显示为十六进制,因为它是有符号的。有没有一种简单的方法可以在JavaScript中实现这一点。不幸的是,我不能声明无符号整数

#-FFFF01
-16776961

应导致:

#FF0000FF
4278190335

[
['rgba(255,0,0,1.0)',
[‘rgb(34、12、64)’,
[“rgb(34,12,64,0.6)”,
['rgba(34,12,64,0.6)',
[“rgb(34 12 64/0.6)”,
[“rgba(34 12 64/0.3)”,
[rgb(34.0124/60%)],
[rgba(34.61264/30%)],
[  34, 12, 64, 0.3 ]
].forEach(分析);
/*
*@param{int | String}r[0,255]或rgba?()
*@param{int}g[0,255]
*@param{int}b[0,255]
*@param{Number}a[0,1]
*/
函数rgba2int(r,g,b,a){
if(typeof r=='string'&&arguments.length==1){
常数[r1,g1,b1,a1]=r
.match(/^rgba?\((\d+\.?\d*)[,\s]*(\d+\.?\d*)[,\s]*(\d+\.?\d*)[,\s\/]*(.+)?\)$/)
.切片(1);
[r,g,b]=[r1,g1,b1].map(v=>parseFloat(v));
a=a1
?a1.结束符(“%”)
?parseInt(a1.子字符串(0,a1.长度-1),10)/100
:parseFloat(a1)
:null;
}
归还
((r&0xFF)
返回a
((r&0xFF)0
:((r&0xFF)>0;

我假设您正在引用它?“与其他按位运算符不同,零填充右移位返回一个无符号32位整数。”此外,我想您可以包装三元条件并移位其结果?如果我知道“为什么”它会起作用,我已经提到了它,但不幸的是我只知道“如何”,对不起。
  return a
    ? (((r & 0xFF) << 24) + ((g & 0xFF) << 16) + ((b & 0xFF) << 8) + (Math.floor(a * 0xFF) & 0xFF)) >>> 0
    : (((r & 0xFF) << 16) + ((g & 0xFF) << 8) + (b & 0xFF)) >>> 0;