-- 压缩函数 function rleCompress(str) local result = {} local i = 1 while i <= #str do local char = str:sub(i, i) local count = 1 while i + count <= #str and str:sub(i + count, i + count) == char do count = count + 1 end if count > 2 then table.insert(result, ("[%d]%s"):format(count, char)) else table.insert(result, char:rep(count)) end i = i + count end return table.concat(result) end -- 解压函数 function rleDecompress(str) local result = {} local i = 1 while i <= #str do if str:sub(i, i) == "[" then local j = str:find("]", i) local num = tonumber(str:sub(i+1, j-1)) local char = str:sub(j+1, j+1) table.insert(result, char:rep(num)) i = j + 2 else table.insert(result, str:sub(i, i)) i = i + 1 end end return table.concat(result) end -- 测试 file = fs.open("1.bimg","r") original = file.readAll() file.close() local compressed = rleCompress(original) print("原始:", original) print("压缩:", compressed) print("解压:", rleDecompress(compressed)) file = fs.open("12.bimg","w") file.write(compressed) file.close()