当前位置: 代码迷 >> JavaScript >> 用Java显示整数
  详细解决方案

用Java显示整数

热度:34   发布时间:2023-06-07 18:22:46.0

我有一种将IPv6地址转换为其十进制值的方法。

目前,我的结果是:

4.254076641128259e+37

但是我需要这个:

42540766411282592857539836924043198464

我的代码:

var ip = '2001:0db8:0:0:8d3:0:0:0';
var address = new v6.Address(ip);
var bin = address.binaryZeroPad();
var dec = 0;
for (var i = 0; i < bin.length; i++) {
    dec = dec + parseInt(bin[i]) * Math.pow(2, bin.length - 1 - i);
}
console.log(dec);

我使用ip-address lib首先将IPv6转换为二进制。

您不能在不损失精度的情况下将无符号的128位数字表示为JavaScript数字。 JavaScript Number仅允许存储最大2 ^ 53的整数。 请参阅

看到08d3组已经丢失了...

var dec = 42540766411282592857539836924043198464;
console.log(dec.toString(16))
// ==> 20010db8000000000000000000000000

一种替代方法是使用另一个库来模拟任意大整数,例如 ( 许可证)。

带有相应示例

var ip = '2001:0db8:0:0:8d3:0:0:0';

// simulate your address.binaryZeroPad(); method
var parts = [];
ip.split(":").forEach(function(it) {
    var bin = parseInt(it, 16).toString(2);
    while (bin.length < 16) {
        bin = "0" + bin;
    }
    parts.push(bin);
})
var bin = parts.join("");

// Use BigInteger library
var dec = bigInt(bin, 2).toString();
console.log(dec);

产量

42540766411282592857539836924043198464
  相关解决方案