gpt4 book ai didi

coldfusion - 将 IPv6 转换为十进制(ip 号)

转载 作者:行者123 更新时间:2023-12-03 19:44:39 24 4
gpt4 key购买 nike

我一直在尝试将所有 ip 地址(IPv4 和 IPv6)转换为十进制格式(ip 编号),将这些数字存储在已经包含 ip 范围的数据库中,并根据用户的 IP 获取国家/地区位置。虽然这对于 IPv4 地址可以很容易地完成,但是当涉及到 IPv6 地址时,我遇到了困难。

说休闲IP应该转换成十进制2a03:29ff:ffff:ffff:ffff:ffff:ffff:ffff

我通过一些在线服务(将 IPv6 转换为十进制)对其进行了测试,只是为了检查一致性,即我的最终结果应该是什么样子。
https://www.ultratools.com/tools/decimalCalc
http://www.ipaddressguide.com/ipv6-to-decimal
两者都返回相同的数字 - 55844004574745424515003293805316145151

现在在我的 coldfusion 代码中,我首先从 IP 中删除了 : 以获取十六进制格式,然后尝试将其转换为十进制

<cfset ipv6='2a0329ffffffffffffffffffffffffff'>
<cfoutput>#inputBaseN(ipv6, 16)#</cfoutput>

导致错误信息

the argument 1 of inputbasen which is now 2a0329ffffffffffffffffffffffffff must be a valid number in base 16"

这有可能实现吗?您如何看待我处理此类事情的方法?有没有更好的方法来根据 IP 获取国家/地区位置?注意:不想依赖任何在线服务!!

最佳答案

InputBaseN 正在尝试转换为整数,该值对于 maximum Integer value 来说太大了,因此错误声称它不是有效数字。

(该错误实际上仅针对 8000000000000000 及更高的十六进制值(即 263 或更高,即 max for Long ) - 在 231 之间抛出和 263-1 InputBaseN 函数并没有告诉你它失败了,而是错误地返回了零。)

解决方案是创建一个 BigInteger ,它没有最大值,并像这样从您的 16 进制字符串转换:

BigInt = createObject("java","java.math.BigInteger").init( ipv6 , 16 ).toString()

关于coldfusion - 将 IPv6 转换为十进制(ip 号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com