Lua 中令人疑惑的表格引用
我试图理解以下函数中发生了什么,但是我无法跟踪它。
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 转换为字节。 即,",5MX" 转换为 2c 35 4d 58,但我不知道它如何引用 vtable 或者为什么需要将一个已经是字节的变量再次转换为 vtable:byte(b)。当然,可以通过中间字节来清晰地看到 ",5MX" 是如何引用 vtable 的,但是然后我就无从下手,不知道返回到 string1 中什么东西,也不知道为什么。
更糟糕的是……
string2 = whatsthis("\f4kp,X\026")
……是否将该参数视为单个字符串或两个值,如果其中没有 \ 作为另一个字符,则该函数如何处理 \ 转义。
我希望我表述得清楚。由于我是 lua 的新手,所以希望有人能在这里解释一下。提前感谢您。
原文链接 https://stackoverflow.com/questions/69179492
问题的一部分,我想,是因为我被给了这个练习,但我甚至不知道 vtable 是一张表还是一串字符串!
你将双引号中的内容分配给了 vtable,所以它必须是一个字符串值。
local vtable = "?\029#sMb5\rY\..."
参见 https://www.lua.org/manual/5.4/manual.html#3
str:byte(i)
是 string.byte(str, i)
的语法糖。
参见 https://www.lua.org/manual/5.4/manual.html#3.4.10
string.byte(str, i)
会返回字符串 str
中第 i
个字符的内部数字代码。因此,它会给出表示该字符的字节值。
参见 https://www.lua.org/manual/5.4/manual.html#pdf-string.byte
我假设 str:byte(i) 将 ASCII 转换为字节。例如。
",5MX"
转换成2c 35 4d 58
是的。
这段代码将检查一个字符是否是 ASCII 标准的一部分。如果是,它将映射到 vtable 字符串中。
如果它是扩展 ASCII 表的一部分,它将按原样使用。
比较 print(whatsthis("ö"))
和 print(whatsthis("a"))
。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
vtable 总是一个字符串。
这是因为它获取字符的数值,然后在位置上使用该索引查找一个字符。乍一看,它似乎实现了某种替换密码,其中使用表格中的不同字符(取自指定的索引(<=127))替换某个具有特定索引的字符。