If someone has better alternatives, please post them.
Code: Select all
function string.substr(text, start, length) -- by ale5000
return text:sub(start, start - 1 + length)
end
Code: Select all
function string.charAt(text, pos) -- by ale5000
return text:sub(pos, pos)
end
Code: Select all
function string.setAt(text, pos, new_value) -- by ale5000
return text:sub(1, pos - 1)..new_value..text:sub(pos + 1)
end
Code: Select all
function string.lastIndexOf(text, search) -- by ale5000
local start, last_pos = 0
while start ~= nil do
last_pos = start
start = text:find(search, start + 1, true)
end
if last_pos == 0 then return nil end
return last_pos
end
Code: Select all
function string.trim_spaces(text) -- by ale5000
return text:gsub("^%s*(.-)%s*$", "%1")
end
Code: Select all
function string.skip_bytes(data, bytes) -- by ale5000
return data:sub(bytes + 1)
end
Code: Select all
-- Returns a string that has the internal numerical code equal of the number passed
function math.number_to_binary_code(in_number) -- by ale5000
if in_number == 0 then return "\0" end
local out_string = ""
while in_number > 0 do
out_string = string.char(in_number % 256)..out_string
in_number = math.floor(in_number / 256)
end
return out_string
end
Code: Select all
-- Returns a number with the internal numerical code of the string passed
function string.binary_code_to_number(in_string) -- by ale5000
local len, i, out_number = in_string:len() + 1, 0, 0
while len > 1 do
len = len - 1
out_number = in_string:sub(len, len):byte() * (256^i) + out_number
i = i + 1
end
return out_number
end
Code: Select all
function string.hex_string_to_binary_code(in_string) -- by ale5000
local len, out_string = in_string:len() + 1, ""
while len > 2 do
len = len - 2
out_string = string.char( "0x"..in_string:substr(len, 2) )..out_string
end
return out_string
end
Code: Select all
function string.size_should_be(binary, required_length) -- by ale5000
local len_to_add = required_length - binary:len()
if len_to_add < 0 then vlc.msg.err("size should be: The string is too long => "..binary) binary = "" len_to_add = required_length end
while len_to_add > 0 do
binary = "\0"..binary
len_to_add = len_to_add - 1
end
return binary
end
Code: Select all
function string.size_should_be__add_to_right(binary, required_length) -- by ale5000
local len_to_add = required_length - binary:len()
if len_to_add < 0 then vlc.msg.err("size should be, add to right: The string is too long => "..binary) binary = "" len_to_add = required_length end
while len_to_add > 0 do
binary = binary.."\0"
len_to_add = len_to_add - 1
end
return binary
end
Code: Select all
function string.add_length(in_string) -- by ale5000
if in_string == "" then return "" end
return math.number_to_binary_code(in_string:len() + 4):size_should_be(4)..in_string -- The length of the length itself is included
end
Code: Select all
function string.add_length_x_byte(in_string, size_of_length) -- by ale5000
return math.number_to_binary_code(in_string:len()):size_should_be(size_of_length)..in_string
end
Code: Select all
function string.base64_decode(data) -- by Alex Kloss <alexthkloss AT web.de>
local b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
data = string.gsub(data, '[^'..b..'=]', '')
return (data:gsub('.', function(x)
if x == '=' then return '' end
local r,f='',(b:find(x)-1)
for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
return r;
end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
if #x ~= 8 then return '' end
local c=0
for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
return string.char(c)
end))
end
Code: Select all
function bitwise_xor(x, y) -- by Arno Wagner <arno AT wagner.name>
if x == nil or y == nil then vlc.msg.err("Bitwise XOR: You cannot pass a nil value") return nil end
local z = 0
for i = 0, 31 do
if x % 2 == 0 then -- x had a '0' in bit i
if y % 2 == 1 then -- y had a '1' in bit i
y = y - 1
z = z + 2 ^ i -- set bit i of z to '1'
end
else -- x had a '1' in bit i
x = x - 1
if y % 2 == 0 then -- y had a '0' in bit i
z = z + 2 ^ i -- set bit i of z to '1'
else
y = y - 1
end
end
y = y / 2
x = x / 2
end
return z
end