在 JavaScript 中,我有两个变量,每个变量都包含一个十六进制数字作为字符串。例如:
var a = 'a3bc',
b = '1d0f';
现在我想添加它们(所以,结果应该是'c0cb'
)。为了让事情变得更容易一些,让我们对此进行一些限制:
- 这些数字总是由相同数量的数字组成(即字符串的长度相同)。
- 如有必要,数字会以 s 为前缀
0
,因此它将是'001a'
,而不仅仅是'1a'
。
另一方面,有一些限制让事情变得有点困难:
- 这些数字不像上面的例子那样由四位数字组成,而是由 20 位数字组成。因此,您不能简单地将它们转换为十进制,将它们相加,然后再将它们转换回来。换句话说:对于 JavaScript 的
number
类型来说,数字太大了(这就是这个答案不起作用的原因)。 - 不允许溢出。如果加上
'ffff'
and'0001'
,结果应该是'0000'
, not'10000'
。换句话说:所有计算都必须使用模除法。
我目前有一个算法可以解决所有这些问题,但它很长,效率不高,而且一切都很优雅。它的想法是逐个字符地遍历字符串,将它们转换为十进制,添加它们,将它们转换回来,记住潜在的溢出等等。如前所述,它工作得很好,但我认为这不是最好的解决方案。
我怎样才能以更好的方式解决这个问题?
PS:我需要在 Node.js 中执行此操作,因此如果有可用的现成模块可以执行此操作,我对此非常满意 :-)