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"
我有一个包含按以下方式编码的 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"