【发布时间】:2021-01-16 12:11:53
【问题描述】:
出于地理定位的目的,我正在尝试获取 ip v6 地址的数值的字符串表示形式。 因为 Classic ASP 不处理 bigint 值,所以我正在尝试使用 Javascript 函数来解决它。
基于这个使用 biginteger.js 库的工作小提琴:https://jsfiddle.net/adamish/mrx3880p/,我调整了该库以作为 ASP 的有效包含。
var ip = '2a00:85c0:0001:0000:0000:0000:0241:0023';
// 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);
Fiddle 中的代码将 ipv6 转换为其二进制表示,然后调用 toString 函数,请求以基数 2 进行转换。
它在小提琴中工作。但是,我无法让它在我的代码中工作,因为返回值是科学计数法,这对我不利。
目标是输入字符串“2a00:85c0:1::241:23”(或其非缩短版本,“2a00:85c0:0001:0000:0000:0000:0241:0023”,不问题)并输出数字等价物的字符串表示形式,或“55830288595252163998698714105846497315”。
由于我只能在 Classic ASP 中使用什么,有没有人能告诉我如何让这种转换工作?
【问题讨论】:
-
那么您的经典 ASP 代码是什么样的?您在 Classic ASP 中使用 JScript 吗?
-
您不能只是将 JavaScript 库转换为 JScript 包含文件并期望它能够工作,这取决于 JavaScript 库的现代程度将决定它在转换时工作的可能性。自己试了一下,第 24 行的包含错误:
BigInteger.prototype = Object.create(Integer.prototype);,错误为Object doesn't support this property or method。 -
我的 ASP 代码基本上只是对您在我的示例中看到的 javascript 的调用,转换为 .js 包含文件中的函数。我知道,Classic ASP 中的 jscript 支持远没有“真正的”javascript 那样扩展,这就是我的问题的重点:有谁知道我如何使用我拥有的武器来完成这项工作?跨度>
-
也许你可以使用两个字段。请记住,您的 IPv6 寻址确实将使用
/64网络,因此您可以使用 64 位网络字段和 64 位 IID 字段。假设您有可用的无符号 64 位整数。 -
谢谢,罗恩莫平。如果我想保留 ipv6 地址的日志,这将起作用,但不幸的是,在这种情况下,我真的需要十进制表示来匹配 ip2location 提供的范围内的它。
标签: javascript asp-classic ipv6