Lua十六进制字符串每两个字符插入一个字符

在Lua中我有以下十六进制字符串

local string="7661722061737472696e673d226c6f6c223b"

如何在每两个字符之间引入/插入"%"作为分隔符。

我希望它看起来像这样。

%76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b
点赞
用户2505965
用户2505965

一种简单的方法是使用string.gsub来替换匹配的模式为已捕获的字符串和分隔符。结果字符串将有一个前置的分隔符,可以通过从开头加上分隔符的长度来删除字符串的一部分。

查看第6.4.1节-模式以更好地理解模式匹配。

local function sep (str, patt, re)
    return str:gsub(patt, '%' .. re .. '%1'):sub(1 + #re)
end

print(sep('7661722061737472696e673d226c6f6c223b', '%x%x', '%'))
--> 76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b

另一种方法是将字符串分割成表,然后使用table.concat将表连接成字符串。

详尽的方法是在循环中计算每个_nth_字符,并将字符串片段连接到迄今为止的结果和分隔符上。

2017-01-27 16:05:39
用户107090
用户107090

下面是使用 gsub 的另一种解决方法:

s="7661722061737472696e673d226c6f6c223b"
t=s:gsub("..","%%%1")
print(t)

代码的含义是:匹配两个字符,并用 % 和匹配的字符替换它们,因此在这两个字符前添加了 %

2017-01-27 18:05:58