local format = function (str) if type(str) ~= "string" then return nil end local result = "Binary string length; " .. tostring(#str) .. " bytes\n" local i = 1 local hex = "" local chr = "" while i <= #str do local byte = str:byte(i) hex = string.format("%s%2x ", hex, byte) if byte < 32 then byte = string.byte(".") end chr = chr .. string.char(byte) if math.floor(i/16) == i/16 or i == #str then -- reached end of line hex = hex .. string.rep(" ", 16 * 3 - #hex) chr = chr .. string.rep(" ", 16 - #chr) result = result .. hex:sub(1, 8 * 3) .. " " .. hex:sub(8*3+1, -1) .. " " .. chr:sub(1,8) .. " " .. chr:sub(9,-1) .. "\n" hex = "" chr = "" end i = i + 1 end return result end return format