int32到十六进制字符串不起作用.打字



我有一个int32,其中包含以以下方式编码的rgba值:

values = [255, 255, 255, 255];
this.colorInt = ( values[0] << 24 ) | ( values[1] << 16 ) | ( values[2] << 8 ) | values[3];

在这种情况下,所有值的范围从0-255

现在,当我尝试将其转换为十六进制字符串时,如下所示:

this.colorInt.toString(16);

我想得到这个:#FFFFFFFF,但我得到了:-1我看过很多关于这个的stackoverflow帖子,但我无法让它发挥作用。。。

我在这里做错了什么?

这是因为-1(基数10(=1111111111111111111111111111111(基数2(

如果您使用逐位运算符,您会看到这个问题,因为它只处理32位整数。

其他像乘法这样的运算符会处理这个问题。由于它们不是逐位运算符,因此它们的计算不限于32位整数。您可以使用以下内容。

this.colorInt = 255 + (255 * 2**8) + (255 * 2**16) + (255*2**24)
this.colorInt.toString(16) // "ffffffff"

否则,我建议一种更可读的方法是

function hexer(a,b,c,d){
return ([a,b,c,d].map(x=>x.toString(16)).join(''))
}
hexer([255,255,255,255]) // "ffffffff"

颜色由3种颜色(RGB(表示,为了引入alpha变量,您的情况将不起作用。

这是你的代码工作

const values = [255, 255, 255];
const colorInt = ( values[1] << 16 ) | ( values[2] << 8 ) | values[3];
console.log(colorInt);
console.log(colorInt.toString(16));

最新更新