lua 中的数组访问问题

Issue with array acces in lua

我不确定为什么这不起作用:

-- split data into an array of chars
dataList = string.gmatch(data, ".")

-- edit char 5 DOES NOT WORK
dataList[5] = 0x66

-- Print out the data in hex
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))     -- <---- this does not work :(
  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'

我怎样才能做到这一点?

您可能希望将字符串存储为 table(数组实际上是 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)))