Lua中关于数组访问的问题
2016-8-16 6:53:55
收藏:0
阅读:117
评论:1
我不确定为什么下面的代码无法正常工作:
-- 将数据分割成字符数组
dataList = string.gmatch(data, ".")
-- 修改第5个字符,但是不起作用
dataList[5] = 0x66
-- 以十六进制打印数据
for chr in dataList do
io.write(string.format("[%02x] ", string.byte(chr)))
end
所以如果我注释掉 dataList[5] = 0x66 这一行,那么代码就可以正常工作了。所以我不明白为什么我不能修改第5个元素。我得到的错误信息更加让我困惑:
Error: main.lua:33: attempt to index global 'dataList' (a function value)
stack traceback:
main.lua:33: in function 'update'
[string "boot.lua"]:463: in function <[string "boot.lua"]:435>
[C]: in function 'xpcall'
这是什么意思?- 我应该怎么做?
实际上,我只想修改字符串的特定字符- 但是在Lua中人们说你不能这么做,因为字符串是不可变的。所以我的想法是将字符串拆分为数组,然后在完成后将其转换回字符串...
更新
感谢hjpotter92的帮助,我现在有以下代码:
dataList = {data:byte(1, data:len())}
dataList[5] = 0x66
if dataList then
finalString = string.char(table.unpack(dataList)) -- <---- 这个不起作用 :(
printStringAsHex("final", finalString)
end
但是,我无法将其转换回字符串,我得到了以下错误:
Error: main.lua:34: attempt to call field 'unpack' (a nil value) stack traceback: main.lua:34: in function 'update' [string "boot.lua"]:463: in function <[string "boot.lua"]:435> [C]: in function 'xpcall'
我该怎么办?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 代码?

你也许想将字符串存储为一个表(在lua中,数组实际上就是
table):dataList = {data:byte(1, data:len())} dataList[5] = 0x66 print( string.char(table.unpack(dataList)) )更新
我不想写一个单独的答案,所以我添加了一个完整的工作示例,适用于任何Lua版本,基于所有伟大的答案/反馈。这只是为了参考,以防其他人遇到类似的问题...
unpack = unpack or table.unpack data = string.char(0x42, 0x42, 0x43, 0x15, 0x034, 0x33, 0x48) dataList = {data:byte(1, data:len())} dataList[5] = 0x66 print(string.char(unpack(dataList)))