Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript移位问题(rgb和rgba到十六进制)_Javascript - Fatal编程技术网

javascript移位问题(rgb和rgba到十六进制)

javascript移位问题(rgb和rgba到十六进制),javascript,Javascript,我找到了一个RGB到十六进制的转换器,我正在尝试制作一个RGBA到十六进制的转换器。原始的rgb2hex函数工作,但新的rgba2hex函数不工作。我做错了什么?rgba函数返回gba,不返回r // convert RGB color data to hex function rgb2hex(r, g, b) { if (r > 255 || g > 255 || b > 255) throw "Invalid color component";

我找到了一个RGB到十六进制的转换器,我正在尝试制作一个RGBA到十六进制的转换器。原始的
rgb2hex
函数工作,但新的
rgba2hex
函数不工作。我做错了什么?rgba函数返回gba,不返回r

// convert RGB color data to hex
function rgb2hex(r, g, b) {
    if (r > 255 || g > 255 || b > 255)
        throw "Invalid color component";
    return ((r << 16) | (g << 8) | b).toString(16);
}

// convert RGBA color data to hex
function rgba2hex(r, g, b, a) {
    if (r > 255 || g > 255 || b > 255 || a > 255)
        throw "Invalid color component";
    return ((r << 32) | (g << 16) | (b << 8) | a).toString(16);
}
当前输出:
ff9b2d
9b2dff


预期输出:
ff9b2d
ff9b2dff

您的问题是JavaScript中的逐位数学限制为31位,因此您无法按原样完成此操作。您需要使用普通数学运算,而不是按位运算:

// convert RGBA color data to hex
function rgba2hex(r, g, b, a) {
    if (r > 255 || g > 255 || b > 255 || a > 255)
        throw "Invalid color component";
    return (256 + r).toString(16).substr(1) +((1 << 24) + (g << 16) | (b << 8) | a).toString(16).substr(1);
}
//将RGBA颜色数据转换为十六进制
函数rgba2hex(r,g,b,a){
如果(r>255 | g>255 | b>255 | a>255)
抛出“无效颜色组件”;
return(256+r).toString(16).substr(1)+(1
// convert RGBA color data to hex
function rgba2hex(r, g, b, a) {
    if (r > 255 || g > 255 || b > 255 || a > 255)
        throw "Invalid color component";
    return (256 + r).toString(16).substr(1) +((1 << 24) + (g << 16) | (b << 8) | a).toString(16).substr(1);
}