Я не знаю, почему это не работает:Проблема с доступом массива в 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'
как я могу добиться этого?
Вы проверили [документы] (https://docs.coronalabs.com/api/library/string/gmatch.html) для 'string.gmatch', в частности часть о том, что она возвращает? – user2357112
@ user2357112 ах, ок я смотрел документы, но я пропустил тип возврата .... как, черт возьми, я достигаю того, что я хочу сделать тогда? - Я смотрел на бесконечные примеры, не вижу, как; Я не хочу делать сложную строковую замену (я вижу, что люди это делают ... Я пропускаю простые массивы символов C-стиля: ( –