加载字符串时出现意外的符号 '\'。

当我尝试创建一个将Lua代码转换为字节码并使用string.dump处理的工具时,我遇到了一个错误。

使用的代码:

s = [[
print("hello lua user")
]]

local byte = ""

for i = 1, s:len() do
byte = byte.."\\"..tostring(s:byte(i))
end

-- 创建在string.dump中使用的函数
f, err = loadstring(byte)

print(err)

local output = string.dump(f)

标题中的错误来自于打印err

奇怪的是,如果我打印byte,然后手动将它粘贴到loadstring中,就能正常工作。

手动粘贴无法工作,因为我需要自动化处理。

点赞
用户1009479
用户1009479

你在 Lua 中混淆了转义序列。让我们看一个更简单的例子:

在使用 ASCII 的系统中,'\97' 等价于 'a',因此

print('\97')
print('a')

两行代码都会打印字符 a,但你转换的是这样的:

print('\\97')

这将打印 \97 本身,而不是 a


为使你的代码正常工作,在获取 byte 后添加以下这些行:

local f1, err1 = loadstring("return '" .. byte .. "'")
byte = f1()

这个 loadstring 调用将像 '\\97' 这样的字符串转换回 '\97'

2014-08-24 03:56:26