如何在Lua中将IP地址转换为整数?

5
在 Lua 中,我该如何将包含 IP 地址的字符串转换为整数?
3个回答

22

你是指IPv4地址吗?你想将其转换为整数格式吗?

local str = "127.0.0.1"
local o1,o2,o3,o4 = str:match("(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)" )
local num = 2^24*o1 + 2^16*o2 + 2^8*o3 + o4

0
我提供了两个解决方案。
  • 解决方案1:不使用Lua位运算。它很慢,但不需要任何外部Lua库和.so或.dll文件。
  • 解决方案2:当您非常频繁地调用这些函数时,性能非常好。在位级别上对数字执行操作非常快。

解决方案1:

function ip2dec(ip) local i, dec = 3, 0; for d in string.gmatch(ip, "%d+") do dec = dec + 2 ^ (8 * i) * d; i = i - 1 end; return dec end

function dec2ip(decip) local divisor, quotient, ip; for i = 3, 0, -1 do divisor = 2 ^ (i * 8); quotient, decip = math.floor(decip / divisor), math.fmod(decip, divisor); if nil == ip then ip = quotient else ip = ip .. "." .. quotient end end return ip end

解决方案2:

http://bitop.luajit.org/install.html

http://bitop.luajit.org/download.html

https://github.com/fengpeiyuan/ipconv

package.path  = package.path  .. ";/home/balaji/lualib/bitopt.lua"

package.cpath = package.cpath .. ";/home/balaji/lualib/bit.so"

local bit = require("bitopt")

function dec2ip(dec) return bit:band(bit:rshift(dec, 24), 0xFF) .. "." .. bit:band(bit:rshift(dec, 16), 0xFF) .. "." .. bit:band(bit:rshift(dec, 8), 0xFF) .. "." .. bit:band(dec, 0xFF) end

function ip2dec(ip) local dec = 0; for d in string.gmatch(ip, "%d+") do dec = d + bit:lshift(dec, 8) end; return dec end

0

另一种方法可能是:

local addr = "127.0.0.1"
local num = 0
addr:gsub("%d+", function(s) num = num * 256 + tonumber(s) end)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接