javascript ->> 按位运算符未按预期工作

标签 javascript angularjs bit-manipulation bitwise-operators

我正在尝试为自己创建一个简单的实用程序,以便能够将值从 RGB 转换为十六进制,反之亦然。除了一个缺陷之外,它在大多数情况下都有效。

如果我输入像 '007aff' 这样的十六进制值,'00' 会被 trim ,结果为 '7aff'。 r/g/b/仍然获得正确的值,但我不希望从十六进制值中删除零。我做错了什么吗?

// for anyone unfamiliar with angular
// $watch runs when the variable in quotes changes in value
// the rest is basic javascript

AngularJS:

  $scope.$watch('hex', function() {

    var rgb = parseInt($scope.hex, 16);

    $scope.r = (rgb >> 16) & 0xFF;
    $scope.g = (rgb >> 8) & 0xFF;
    $scope.b = rgb & 0xFF;

    $scope.rgb = 'rgb(' + $scope.r + ',' + $scope.g + ',' + $scope.b + ');';

  });

  $scope.$watch('r+g+b', function() {

    $scope.rgb = 'rgb(' + $scope.r + ',' + $scope.g + ',' + $scope.b + ');';
    $scope.hex = parseInt($scope.r << 16 | $scope.g << 8 | $scope.b).toString(16);
  });

Here is a sample Plunker:

最佳答案

00 并未直接 trim 。当您将 rgb 数字 转换为字符串时,您不会使用前导零对其进行格式化。

尝试使用前导零进行格式化:

var value = parseInt($scope.r << 16 | $scope.g << 8 | $scope.b);
$scope.hex = ('000000' + value.toString(16)).slice(-6);

关于javascript ->> 按位运算符未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25392438/

相关文章:

javascript - 在单个标签中使用两个 ngRepeat

java - 提取整数的最右边的 N 位

c - 警告 : left shift count >= width of type

javascript - 处理字符串中的单/双引号

javascript - 正则表达式缺少括号

javascript - Angular JS - 更改一个作用域状态并将其余作用域设置为 false 的最佳方法

javascript - 输入/返回时指令语法错误

c++ - 如何左移一个特定位?

javascript - Firefox WebExtension - 如何获取和修改跨域iframe的内容

javascript - 如何使用对象数组更新 firebase?