我正在尝试更改其中包含端口号的IP地址字符串,以便对表进行排序,这是一个示例IP字符串:
IP = "120.88.66.99:075"
我可以删除.
和:
:
IP = string.gsub(IP,'%W',"")
这给了我120886699075
,但我想将:
更改为.
,因此它会给我120886699.075
编辑:
实际上我想要的是没有工作,因为它没有考虑到。之间的数字的数量所以我想要的是一种以给定格式对ip进行排序的方法,因此包含原始ip的表字符串可以排序。
编辑2:
我有这个几乎与此有关:
function IPToDec(IPs)
local t = {}
local f = "(.-)%."
local l = 1;
local s, e, c = IPs:find(f,1)
while s do
if s ~= 1 or c ~= "" then
table.insert(t,c)
end
l = e+1;
s, e, c = IPs:find(f,l)
end
if l <= #IPs then
c = IPs:sub(l)
table.insert(t,c)
end
if(#t == 4) then
return 16777216*t[1] + 65536*t[2] + 256*t[3] + t[4]
else
return -1
end
end
IP = "120.88.66.99:075"
IP = IPToDec(IP:gsub('%:+'..'%w+',""))
但我不得不松开端口以使其正确排序,理想情况下我想在排序中包含端口号,因为ip可能来自相同的来源但不同的计算机。 / p>
答案 0 :(得分:3)
最简单的解决方案是使用两种模式:
IP = IP:gsub("%.", ""):gsub(":", ".")
第一个gsub
用空字符串替换.
,第二个用:
替换为.
也可以使用一次gsub
来电。使用辅助表作为第二个参数,如下所示:
IP = IP:gsub("%W", {["."] = "", [":"] = "."})
答案 1 :(得分:1)
两个
IP1 = "120.88.11.1:075"
IP2 = "120.88.1.11:075"
将转换为相同的字符串12088111.075
这是你真正需要的吗?
您可能需要以下类型的转化?
IP1 = "120.88.11.1:075" --> 120088011001.075
IP2 = "120.88.1.11:075" --> 120088001011.075
local function IPToDec(IPs)
-- returns integer from (-1) to (2^48-1)
local d1, d2, d3, d4, port = IPs:match'^(%d+)%.(%d+)%.(%d+)%.(%d+):?(%d+)$'
if d1 then
port = port == '' and 0 or port
return (((d1*256+d2)*256+d3)*256+d4)*65536+port
else
return -1
end
end
print(string.format('%.16g',IPToDec("120.88.66.99:075")))
print(string.format('%.16g',IPToDec("120.88.66.99")))
print(string.format('%.16g',IPToDec("not an IP")))