--encode
function strToBytes(str)
local bytes = { str:byte(1, -1)
for i = 1, #bytes do
bytes[i] = bytes[i] + 100
end
return table.concat(bytes, ',')
end
--decode
function bytesToStr(str)
local function gsub(c)return string.char(c - 100) end
return str:gsub('(%d+),?', gsub) end
реализовано:
str = "hello world"
strbyte = strToBytes(str)
bytestr = bytesToStr(strbyte)
print(strbyte)
Выход:
204,201,208,208,211,132,219,211,214,208,200
печать (bytestr)
Выход:
"Привет, мир"
Привет, мне нужно улучшить мой код выше. На самом деле функции кодирования и декодирования работают нормально, но мне нужно немного изменить.
Я хочу сделать функции кодирования похожими на приведенный выше код, но результаты приведены в следующей таблице:
* * {Тысяча двадцать-один 204.201.208.208.211.132.219.211.214.208.200} * * тысяча двадцать-два
Затем, как и в случае с моими первыми функциями декодирования, все байты внутри таблицы должны быть возвращены в «мир приветствия».
Я надеюсь, что мои цель и объяснение выше легко понять. Заранее благодарим за любую помощь и предложения.
Обновление объяснения:
Немного сложно объяснить, каковы мои цели. Но я постараюсь объяснить как можно лучше.
Я пытаюсь сделать кодировщик скриптов. Функции кодирования находятся на стороне кодированных сценариев, а функция декодирования - на стороне кодированных сценариев. Поэтому я должен написать каскадную функцию декодирования перед закодированной строкой.
Для ясного объяснения, скрипты кодировщика будут загружать исходный код отмены кода.
file = io.open(path, "r")
local data = file:read("*l")
Проблема в том, что таблица не может быть объединена со строкой.
local data = encode(str)--the result is byte array
local data = "decode("..data..")"
file:write(data)
file:close()
local data = string.dump(load(data),true,true)
Моя первая цель - скрыть какую-то важную строку, потому что результат string.dump не скрывает всю строку.
Моя вторая цель - сделать запутанный код, используя byteArray.
Любое решение или предложение?
решаемые
function strToBytes(str)
local byteArray= { str:byte(1, -1) }
for i = 1, #byteArray do
byteArray[i] = byteArray[i] + 100
encoded = '{' ..table.concat(byteArray, ',') .. '}'
end
return "load(string.dump(load(bytesToStr("..encoded.."))))()\n"
end
Большое вам спасибо ... ?