|
On Friday, January 23, 2015 01:44:27 PM Soni L. wrote: > How can I quickly concatenate 2 tables? (or convert a whole string to a > table of bytes/numbers) > > For example: > > local t = {string.byte(str, 1, stack_limit)} .. {string.byte(str, > stack_limit+1, stack_limit*2)} -- .. etc
do local stringtobytes_mt = { __index = function(t, k) local i = math.tointeger(k) -- Lua 5.3 assert(i == k) local b = t.string:byte(i) rawset(t, i, b) return b end, __newindex = function(t, k, v) error("") end, __len = function(t) return #t.string end }
function stringtobytes(str) return setmetatable({string=str}, stringtobytes_mt) end end
local t = stringtobytes "Hello World!" print(#t) -- 12 print(t[6]) -- 32 for _,b in ipairs(t) do io.write(string.format("%02X", b)) end io.write "\n" -- 48656C6C6F20576F726C6421
And I'm not sure the rawset is even needed as string.byte may be cheap enough. Always profile before optimizing.
-- tom <telliamed@whoopdedo.org> |