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

int32 to hex string not working.. Typescript

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

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 我看过很多关于这个的 Whosebug 帖子,但我无法让它工作......

我做错了什么?

颜色用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));

这是因为整数 -1(基数 10)= 11111111111111111111111111111111(基数 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"