如何在Lua字符串中嵌入十六进制值(即\x相当于)

在各种语言中,您可以使用 \x 转义序列在字符串文字中嵌入十六进制值:

"hello \x77\x6f\x72\x6c\x64"

如何在 Lua 5.1 中实现相同的功能?

点赞
用户286701
用户286701

你可以使用 \ddd 转义字符嵌入 十进制 值到 Lua 字符串字面量中,其中 ddd 是一个长度最多为三个 十进制数字 的序列。例如:

"\72ell\111""hello" 是相同的。

2015-04-30 11:46:39
用户107090
用户107090

从 Lua 3.1 开始,你可以在字符串自由中使用 十进制 转义。

从 Lua 5.2 开始,你可以在字符串自变量中使用十六进制转义。

在 Lua 5.1 中,你可以事后将十六进制转义为:

s=[[hello \x77\x6f\x72\x6c\x64]]
s=s:gsub("\\x(%x%x)",function (x) return string.char(tonumber(x,16)) end)
print(s)

注意使用 _长字符串_,它们不会解释转义序列。如果你像原始代码中一样使用 _短字符串_(用引号包起来),那么 \x 将会被静默转换为 x,因为 Lua 5.1 不理解 \x。而 Lua 5.2 及更高版本会对它不理解的转义序列报错。

2015-04-30 13:15:58