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

时间:2017-01-27 13:59:58

标签: lua hex

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

local string="7661722061737472696e673d226c6f6c223b"

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

我希望它看起来像这样。

%76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b

2 个答案:

答案 0 :(得分:2)

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

有关模式匹配的更好理解,请参阅§6.4.1 – Patterns

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将表格连接成字符串。

详尽的方法是计算循环中的每个第n个字符,并获取字符串切片,与目前为止的结果和分隔符连接。

答案 1 :(得分:1)

以下是gsub的另一种解决方案:

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

它显示:匹配两个字符并将其替换为%和匹配,从而将%添加到两个字符之前。