在Javascript中更容易使用十六进制字符串和十六进制值

bre*_*ine 22 javascript variables hex

我正在使用代表十六进制数字(实际上是十六进制颜色)并添加它们的字符串.所以,加上aaaaaa+ 010101= ababab.我的方法似乎不必要地冗长而复杂:

var hexValue = "aaaaaa";
hexValue = "0x" + hexValue;
hexValue = parseInt(hexValue , 16);
hexValue = hexValue + 0x010101;
hexValue = hexValue.toString(16);
document.write(hexValue); // outputs 'ababab'
Run Code Online (Sandbox Code Playgroud)

十六进制值仍然是串联后的字符串0x,所以后来我必须将它更改为一个数字,然后我可以添加,那么我必须改变它为十六进制格式!如果我添加的数字也是一个十六进制字符串,或者如果考虑到我#在所有这些开始之前删除了十六进制颜色,那么还有更多的步骤.

当然,有一种方法可以用更少的步骤来做到这一点!(我并不是说只是将它全部放在一行(parseInt("0x"+"aaaaaa",16)+0x010101).toString(16)或使用速记,我的意思是实际上做的更少.)

有没有办法让Javascript停止对其所有数学运算使用十进制并使用十六进制代替?或者是否有其他方法使Javascript更容易使用Hex?

mae*_*ics 30

不,默认情况下无法告诉JavaScript语言使用十六进制整数格式而不是十进制格式.您的代码尽可能简洁,但请注意,当您使用带有基数的"parseInt"时,不需要在前面添加"0x"基本指示符.

以下是我将如何处理您的问题:

function addHexColor(c1, c2) {
  var hexStr = (parseInt(c1, 16) + parseInt(c2, 16)).toString(16);
  while (hexStr.length < 6) { hexStr = '0' + hexStr; } // Zero pad.
  return hexStr;
}

addHexColor('aaaaaa', '010101'); // => 'ababab'
addHexColor('010101', '010101'); // => '020202'
Run Code Online (Sandbox Code Playgroud)

  • 这是非常整洁的。如果将 0x010101 添加到 0xFFFFFF 会发生什么?或者 0x000100 到 0x00FF00 - 你会得到一些奇怪的结果,因为这里实际上有三个八位字节对,它们应该分别用限制 &gt;00&lt;FF 相加,然后再连接在一起。 (2认同)

HBP*_*HBP 9

这个怎么样:

var hexValue = "aaaaaa";
hexValue = (parseInt(hexValue, 16) + 0x010101).toString(16);
document.writeln(hexValue); // outputs 'ababab'
Run Code Online (Sandbox Code Playgroud)

如果使用parseInt,则无需添加0x前缀.


Abu*_*101 5

我认为已接受的答案是错误的。十六进制颜色表示不是线性的。但是,R,G和B被赋予3组两个字符。

因此,您不能只添加一个整数并期望RGB正确相加。

For Example

n1 = '005500'; <--- green
n2 = '00ff00'; <--- brighter green
Run Code Online (Sandbox Code Playgroud)

添加这些数字将导致绿色。无论如何,添加绿色不应使红色增加。但是通过做被接受的答案正在做的事情,就像将整数视为一个数字一样,那么您将继续求加大于f的数字,f + 1 = 10。

you get `015400` so by adding greens the RED increased .... WRONG
Run Code Online (Sandbox Code Playgroud)

加005500 + 00ff00应该得出= 00ff00。您不能在最大绿色中添加更多绿色。