Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Lua 5.1 basic byte conversion functions
- local bytestonumber = function(bytestr)
- -- little endian, string.reverse will help to reverse endianness
- if bytestr == nil or #bytestr == 0 then
- return nil
- end
- local n = 0
- local x = 1
- for i = 1, #bytestr do
- n = n + (bytestr:byte(i) * x)
- x = x * 256
- end
- return n
- end;
- local numbertobytes = function(n, length)
- -- little endian, string.reverse will help to reverse endianness
- if n == nil then
- return nil
- end
- local bytestr = ""
- -- byte-by-byte conversion
- local x = n
- repeat
- local byteval = x % 256
- if byteval < 0 then
- byteval = 0x100 + x
- end
- bytestr = bytestr .. string.char(byteval)
- x = math.floor(x / 256)
- until not ((n >= 0 and x ~= 0) or (n < 0 and x ~= -1))
- -- length check
- if length and #bytestr > length then
- error("illegal argument #2: out of range, length too short")
- end
- -- add padding bytes
- if length and #bytestr < length then
- bytestr = bytestr .. string.char(n >= 0 and 0 or 255):rep(length - #bytestr)
- end
- return bytestr
- end;
- local hextobytes = function(hexstr)
- if hexstr == nil then
- return nil
- end
- if #hexstr % 2 ~= 0 then
- error("illegal argument #1")
- end
- local bytestr = ""
- for i = 1, #hexstr, 2 do
- local s = hexstr:sub(i, i + 1)
- local n = tonumber(s, 16)
- if n == nil then
- error("illegal argument #1")
- end
- bytestr = bytestr .. string.char(n)
- end
- return bytestr
- end;
- local bytestohex = function(bytestr)
- if bytestr == nil then
- return nil
- end
- local hexstr = ""
- for i = 1, #bytestr do
- hexstr = hexstr .. string.format("%02x", bytestr:byte(i))
- end
- return hexstr
- end;
- local bytestoarray = function(bytestr)
- if bytestr == nil then
- return nil
- end
- local bytearray = {}
- for i = 1, #bytestr do
- bytearray[i] = bytestr:byte(i)
- end
- return bytearray
- end;
- local arraytobytes = function(bytearray)
- -- equal to string.char(unpack(bytearray)), but this one uses less stack
- if bytearray == nil then
- return nil
- end
- local bytestr = ""
- for i, v in ipairs(bytearray) do
- bytestr = bytestr .. string.char(v)
- end
- return bytestr
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement