【发布时间】:2021-11-09 17:43:37
【问题描述】:
我正在尝试了解以下函数中发生了什么,但我无法跟踪它。
function whatsthis(str)
local val = ""
local vtable = "?\029#sMb5\rY\041>hS\005Bm~2\021\016\024\023xN\019gRK\\;p!\002jJ_\t4:-\000vLiA]I=6l\018ec\0248\030w%7\b\0151,\003\004Z)9`{*kP\028F}o\v\n.[EfV\006^\001nC<U\027WQ&\022(\fTD\026Guz/+aO'q3d|H\025 \ay$\"X\017\0200r@t"
for i = 1, #str do
local b = str:byte(i)
if b > 0 and b <= 127 then
val = val .. string.char(vtable:byte(b))
else
val = val .. string.char(b)
end
end
return val
end
我想,部分问题是我已经完成了这个练习,但我什至不知道 vtable 是表格还是字符串!
调用示例:
string1 = whatsthis(",5MX")
我假设 str:byte(i) 将 ascii 转换为字节。 IE。 ",5MX" 到 2c 35 4d 58 但我不知道它是如何引用 vtable 的,也不知道为什么需要在 vtable:byte(b) 中重新转换已经是一个字节的变量。很明显 ",5MX" 通过中间字节引用了 vtable,但后来我迷路了,不知道什么会返回到 string1 或为什么。
让事情变得更糟......
string2 = whatsthis("\f4kp,X\026")
... 该参数是否被视为单个字符串或两个值,如果不作为另一个字符,\ 在函数中如何处理转义符。
我希望我已经清楚了。我是 lua 的新手,所以我希望有人可以在这里有所启发。提前致谢。
【问题讨论】: