【发布时间】:2017-05-18 16:00:45
【问题描述】:
我在 Java 中有以下代码将十六进制值转换为长数字,在示例中我使用了值:'B4EEB49B04C0'
public static long HexStr2Long(String value)
{
value = value.toUpperCase();
long result = 0;
for (int i = 0; i < value.length(); i++)
{
int x = value.length() - i - 1;
char ch = value.charAt(i);
result += keys.indexOf(ch) * Pow(exponent, x);
}
return result;
}
public static long Pow(long baseNo, long x)
{
long value = 1;
while (x > 0)
{
value = value * baseNo;
x--;
}
return value;
}
public static void main(String[] args) {
long result = HexStr2Long("B4EEB49B04C0");
System.out.print("resultado: "+result+"\n");
}
结果是:1463925582232863984
现在,我在 Javascript 中创建了等效代码:
pow = function(baseNo, x){
var value = 1;
while(x > 0){
value = value * baseNo;
x--;
}
return value;
}
hexStr2Long = function(val){
var keys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var exponent = keys.length;
val = val.toUpperCase();
var result = 0;
for (var i = 0; i < val.length; i++) {
var x = val.length - i - 1;
var ch = val.charAt(i);
result += keys.indexOf(ch) * Math.pow(exponent, x);
}
return result;
}
var r = hexStr2Long(wifimac);
console.log('Result: '+r);
结果是:1463925582232864000,这个错了,必须和Java代码一样。
我怎样才能做到这一点?我已经尝试使用该库 (BigNumber) 但没有成功。
【问题讨论】:
-
这不会解决你的问题,但你没有调用你定义的 pow 函数,而是调用 Math.pow
-
是的,我知道。结果还是一样的。
-
@Andreas 我在下面的(错误)答案中遇到了同样的错误。如果您将十六进制数解释为 IEEE-754 FP 数,则它会准确生成 1463925582232863984。
标签: javascript java node.js math numbers