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)))
我不确定为什么这不起作用:
-- 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)))