在rgba中转换十六进制颜色时的负值(JavaScript)

时间:2017-11-18 23:33:13

标签: javascript hex data-conversion rgba

我的问题是转换带有alpha值的十六进制颜色字符串,并获得四个通道R G B A. 字符串的长度为8(例如:4faabbaa)

我尝试使用以下代码(使用按位运算符)来转换字符串并获取rgba。

var hex = "4faabbaa"; //In this case R is correct (79)

var hexint = parseInt(hex, 16);
var r = hexint >> 24;
var g = (hexint & 0x00FF0000) >> 16;
var b = (hexint & 0x0000FF00) >> 8;
var a = hexint & 0x000000FF;

该代码适用于G B和A通道的所有值,但对于某些R值,则返回负值。

例如,如果我使用:

var hex = "ccaabbaa"; //In this case returns a negative R (-52)

返回R

的负值

为什么?

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人:解决方案是使用>>>而不是>>,因为位0x80000000将负号存储在32位带符号整数值中。